1

約800万行を含むインデックスを使用してFuzzyQueryを作成する必要があります。この種のクエリはかなり遅く、一致するたびに約20秒かかります。実際、あいまい検索を実行する前に、別のフィールドを使用して結果を約5000ヒットに絞り込むことができます。これが機能するためには、最初に「より狭い」フィールドで検索を行い、次にそれらの結果内であいまい検索を使用できる必要があります。

lucene FAQによると、私がしなければならないのはBooleanQueryだけです。ここでは、「より狭い」が必要です(lucene 3ではBooleanClause.Occur.MUST)。

今、私は2つの異なるアプローチを試しました。

a)次のような入力でクエリパーサーを使用します。 narrower:+narrowing_text fuzzy:fuzzy_text~0.9

b)TermQueryFuzzyQueryを使用してBooleanQueryを構築する

どちらも機能しませんでした。ナローを使用しない場合とほぼ同じ時間になります。

また、ナローが機能している場合は時間が大幅に改善されることを確認するために、ナローに一致する5000アイテムのみのインデックスを再作成したところ、検索は非常に高速になりました。

不思議に思う人のために、私はピルセン3.0.2を使用しています。

4

1 に答える 1

2

Doppleganger、おそらくFilter、具体的にはQueryWrapperFilterを使用できます。Lucene in Actionの例に従ってください。Python で使用するには、いくつかの変更が必要になる場合がありますが、それ以外は簡単です。

  1. これを 5000 ヒットに絞り込むクエリを作成します。
  2. これを使用して QueryWrapperFilter を構築します。
  3. あいまいクエリを含む検索でフィルターを使用します。
于 2010-10-12T15:09:48.973 に答える