2012-01-24 14 views
0

名前を検索するときに "John Doe"という検索結果が "John"、 "Doe"、または "John Doe"の検索結果と一致するように検索クエリを空白で分割するとき、クエリ全体が全体としてのみではなく、これは今私がやっている方法です:WhenepaceでLucene QueryStringを分割する最も効果的な方法

BooleanQuery booleanQuery = new BooleanQuery(); 
String[] terms = queryString.split(" "); 
for(String term : terms) { 
    booleanQuery.add(new FuzzyQuery(new Term("firstName", term)), BooleanClause.Occur.SHOULD); 
    booleanQuery.add(new FuzzyQuery(new Term("lastName", term)), BooleanClause.Occur.SHOULD); 
} 

私には、このアプローチの継ぎ目はちょっと乱雑です。より良い方法がありますか?

+0

なぜQueryParserを使用しないのですか? – milan

+0

はい、QueryParserとWhiteSpaceAnalyzerを使用します(空白でのみ分割したい場合) – naresh

+0

JonがJohnなどの部分的な単語に一致するようにしたいので、booleanクエリを使用しました.QueryParserとWhiteSpaceAnalyzerでこれを達成できますか? – ryandlf

答えて

0

簡易アナライザを使用していない場合は、クエリパーサーが間違っています。 You should analyze query terms the same way they were analyzed at indexing time

あなたがしようとしていることによると、クエリ文字列をアナライザで分割する必要があります。それは義務ではありませんが、そうでない場合(たとえば、あなたが空白で分割し、その後独立してすべての単語を分析することができ)、あなたには、いくつかの(非自明な)問題を解決する必要があります。

  • は何をすべきとき分析単語のいくつかの用語(化合物の名前で発生する可能性があります)?
  • 単語がストップワード(トークンを生成しない)の場合の対処方法
関連する問題