2017-01-30 3 views
0

大文字と小文字を区別するか、大文字と小文字を区別しない検索を行うオプションをユーザーに与えたいと考えています。Lucene大文字と小文字を区別するかどうかを切り替える方法

私の考えでは、大文字と小文字を区別するアナライザを使用してデータをインデックス付けし、ユーザの入力に応じて機密または非機密性のアナライザを使用して検索します。

だから私は私の大文字と小文字を区別アナライザを作成し、ここに私のコードの簡単です:インデックスについては

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; 

これを疲れさせたとき、敏感なケースは機能しましたが、無感覚のケースはそうではありませんでした。

さらに調査した結果、低ケアクエリで大文字と小文字を区別するアナライザを使用すると機能しないことが判明しました。大文字と小文字を区別するクエリを使用した大文字と小文字を区別したアナライザのインデックス付き作業、および大文字と小文字を区別しないクエリを使用したインデックス付き作業では、誰でもこれを確認できますか?

大文字と小文字を区別しないで検索する唯一の信頼できる方法は、それぞれの場合に1つずつ2回インデックスを作成することです。これは正しいですか?

答えて

0

大文字と小文字を区別しないで検索する唯一の信頼できる方法は、それぞれの場合に1つずつ2回インデックスすることです。これは正しいですか?可能な解決策だろう

が、そのユースケースのために、より最適なソリューションがあります: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/

関連する問題