クエリのpaintCode:a *部分は、「a」で始まるすべてのpaintCodeのプレフィックスクエリです。それはあなたが目指していることですか?
Luceneは、プレフィックスクエリを、プレフィックスに一致する可能性のあるすべての用語を含むブールクエリに拡張します。paintCode
あなたの場合、明らかに「a」で始まる1024を超える可能性のあるsがあります。
プレフィックスクエリが役に立たないように聞こえる場合は、真実からそう遠くはありません。
プレフィックスクエリを使用しないように、インデックススキームを変更することをお勧めします。例で何を達成しようとしているのかわかりませんが、最初の文字でペイントコードを検索する場合は、paintCodeFirstLetterフィールドを作成し、そのフィールドで検索します。
追加した
必死で、部分的な結果を受け入れる意思がある場合は、ソースから独自のLuceneバージョンを作成できます。PrefixQuery.java
ファイルとMultiTermQuery.java
、の両方に変更を加える必要がありますorg/apache/lucene/search
。rewrite
両方のクラスのメソッドで、行を変更します
query.add(tq, BooleanClause.Occur.SHOULD); // add to query
に
try {
query.add(tq, BooleanClause.Occur.SHOULD); // add to query
} catch (TooManyClauses e) {
break;
}
私は自分のプロジェクトのためにこれを行いました、そしてそれはうまくいきます。
Luceneを変更するというアイデアが本当に気に入らない場合は、独自のPrefixQueryバリアントと独自のQueryParserを作成できますが、それがはるかに優れているとは思いません。