0

数十億の小さなドキュメント (〜 200 文字/ドキュメント) で構成される大規模なデータセットがあります。位置クエリを実行して最良の 3 つのドキュメントのみを取得する最も効率的な方法は何ですか?

私の考えは、位置インデックスを作成してデータセット全体に対してそのようなクエリを実行するのではなく、単純なブールクエリの結果を使用してオンザフライで位置インデックスを構築し、次に位置クエリを実行して、私が見つけた最良の 3 つのドキュメントを取得することです。必要。

したがって、代わりに: 数十億のドキュメント -> ポジティナル インデックスの構築 -> 位置クエリの実行 -> 最適な 3 つのドキュメントの取得

私は次のことをしたいと思います: 何十億ものドキュメント -> 通常のインデックスを構築します -> ブールクエリを実行します -> 最良の 250 (高い数値) を取得します -> 結果を使用して RAM 位置インデックスを構築します -> 位置クエリを実行します - > ベスト 3 のドキュメントを取得します。

そうすることで、わずかな概算を支払うことで検索時間を短縮できると思います。それを行うための他の/より良い解決策はありますか?

4

2 に答える 2

1

検索フィルターを使ってみます。おそらく aTermsFilterで十分かもしれませんが、かなり確実に a QueryWrapperFilter. CachingWrapperFilterフィルターの結果をキャッシュすることが有益な場合は、これらを でラップできます。

呼び出しに渡されるIndexSearcher.searchと、クエリはフィルターによって受け入れられたドキュメントの検索に制限されます。

タグを含めたので、パラメータを使用して、フィルタリングされたクエリを solr でも使用できfqます

于 2013-09-30T15:41:59.927 に答える
0

femtoRgonに同意。位置クエリで同じ用語が発生する場合は、位置クエリの (サブ) 結果をキャッシュすることも検討できます。

結果のスパンを何らかの方法で保存する CachingSpanQuery クラスを自分で導入できる SpanQuery オブジェクトを使用するとします。効率を高めるには、位置情報を圧縮して保存する方法が必要です。

于 2014-01-07T13:54:20.777 に答える