クエリ処理に関する私の理解は正しいですか?
- Get DocSet from cache or First filter query は OpenBitSet または SortedVIntSet の実装を作成し、それをキャッシュします
- キャッシュから DocSet を取得するか、他のすべてのフィルターが DocBitSet の実装を作成し、オリジナルと交差します (このコードの効率は DocSet の最初の実装の実装に依存します)
- Lucene フィルター + クエリ検索を使用して、MainQuery と最終的な DocSet (すべての交差の後) でリープフロッグを行います (この効率は、最初の DocSet 実装に依存します) 。
- 元のクエリの AND としてポスト フィルター (cost > 100 && cache==false) を適用します。
結果として、小さなクエリの場合は SortedIntSet の方が効率的であり、大きな BitSet の場合は優れているため、パフォーマンスは最初のフィルターに依存します。私は正しいですか?
質問の 2 番目の部分: DocSet には、HashDocSet と SortedIntDoc の 2 つの主要な実装があります。各交差実装は、最初のフィルターのすべてのインスタンスを反復し、2 番目の DocSet にもあるかどうかを確認します...つまり、フィルターをサイズで並べ替え、最初に最小にする必要があります。キャッシュされたフィルターの順序を制御することは可能ですか (コストはキャッシュされていないフィルターに対してのみ機能します)?