2

私はセマンティクスを理解しています。最初にクエリを実行し、次にDocIdSetsとしてフィルターを適用します(キャッシュからフィルターを取得します)。

一部のクエリでは、非常に非効率的です。たとえば、メインクエリがすべてのドキュメントの複雑なdouble関数(sqrt(popularity)+ distance(...))である場合、最初にすべてのインデックスについてこの関数を評価してから、フィルタリングします。 。

フィルタリングされたドキュメントIDセットに対して元のクエリを実行する方法はありますか?

4

1 に答える 1

1

最初にクエリを実行し、次にDocIdSetsとしてフィルターを適用します(キャッシュからフィルターを取得します)。

これは正しくありません。Solrは必要なスコアのみを計算します。つまり、いずれかのフィルターがドキュメントに一致しない場合、このドキュメントのスコアは計算されません。

ただし、ディスクアクセスを実行する必要があるのは事実です。これを防ぐために、SolrにはuseFilterForSortedQueryオプションがあり、使用可能な場合は最初にキャッシュ内のDocSetをフェッチしてから、メモリー内でソートします。それがあなたが探していたものだと思います。

于 2012-08-22T09:32:40.533 に答える