約800万行を含むインデックスを使用してFuzzyQueryを作成する必要があります。この種のクエリはかなり遅く、一致するたびに約20秒かかります。実際、あいまい検索を実行する前に、別のフィールドを使用して結果を約5000ヒットに絞り込むことができます。これが機能するためには、最初に「より狭い」フィールドで検索を行い、次にそれらの結果内であいまい検索を使用できる必要があります。
lucene FAQによると、私がしなければならないのはBooleanQueryだけです。ここでは、「より狭い」が必要です(lucene 3ではBooleanClause.Occur.MUST)。
今、私は2つの異なるアプローチを試しました。
a)次のような入力でクエリパーサーを使用します。
narrower:+narrowing_text fuzzy:fuzzy_text~0.9
b)TermQueryとFuzzyQueryを使用してBooleanQueryを構築する
どちらも機能しませんでした。ナローを使用しない場合とほぼ同じ時間になります。
また、ナローが機能している場合は時間が大幅に改善されることを確認するために、ナローに一致する5000アイテムのみのインデックスを再作成したところ、検索は非常に高速になりました。
不思議に思う人のために、私はピルセン3.0.2を使用しています。