簡體   English   中英

Lucene如何在區分大小寫和不區分大小寫之間切換

[英]Lucene how to switch between case sensitive and case insensitive

我想讓用戶可以選擇區分大小寫或不區分大小寫的搜索。

我的想法是使用區分大小寫的分析器對數據建立索引,然后根據用戶的輸入使用敏感或不敏感的分析器進行搜索。

因此,我創建了區分大小寫的分析器,這是我的簡單代碼:

public final class CaseSensitiveStandardAnalyzer extends StopwordAnalyzerBase {
  @Override
  protected TokenStreamComponents createComponents(final String fieldName, final Reader reader) {
    final StandardTokenizer src = new StandardTokenizer(matchVersion, reader);
    src.setMaxTokenLength(maxTokenLength);
    TokenStream tok = new StandardFilter(matchVersion, src);
    tok = new StopFilter(matchVersion, tok, stopwords);
    return new TokenStreamComponents(src, tok) {
      @Override
      protected void setReader(final Reader reader) throws IOException {
        src.setMaxTokenLength(CaseSensitiveStandardAnalyzer.this.maxTokenLength);
        super.setReader(reader);
      }
    };
  }

為了索引,我使用了這個:

Analyzer analyzer = new CaseSensitiveStandardAnalyzer(Version.LUCENE_46);
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_46,analyzer);
IndexWriter indexWriter = new IndexWriter(indexDir,config);
indexWriter.addDocument(document);

對於搜索,我使用了:

Analyzer analyzer;
if(caseSentive)
    analyzer = new CaseSensitiveStandardAnalyzer(Version.LUCENE_46);
else 
    analyzer = new StandardAnalyzer(Version.LUCENE_46);
QueryParser queryParser = new QueryParser(Version.LUCENE_46,"content", analyzer);
Query query = queryParser.parse(searchString);
//Search 
TopDocs results  = indexSearcher.search(query,10000);
ScoreDoc[] hits = results.scoreDocs;

當我對此感到厭倦時,敏感的案例起作用了,但是不敏感的案例卻沒有。

經過更多研究后,我發現將區分大小寫的分析器與較低關注度的查詢結合使用是行不通的。 區分大小寫的分析器索引可以與區分大小寫的查詢一起使用,而區分大小寫的分析器索引可以與不區分大小寫的查詢一起使用,有人可以確認嗎?

在我看來,搜索區分大小寫和不區分大小寫的唯一可靠方法是索引兩次,每種情況一次,這是正確的嗎?

在我看來,搜索區分大小寫和不區分大小寫的唯一可靠方法是索引兩次,每種情況一次,這是正確的嗎?

那將是一個可能的解決方案,但是針對該用例有更多的最佳解決方案: https : //stackoverflow.com/a/2490441/867816

這也可能有所幫助: http : //www.hascode.com/2014/07/lucene-by-example-specifying-analyzers-on-a-per-field-basis-and-writing-a-custom-analyzertokenizer/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM