私は同じ質問に対するすべての回答を読みましたが、ユースケースにどの回答を使用すべきか、またその理由が明確ではありません。どちらも同じ結果を返します。誰かが正しく答えたように、「FilterQueryがキャッシュされて全体的なクエリ時間が速くなる」ことを理解しています。
また、「フィルタリングではファセットのタグ付けもできるため、ファセットにタグを付けて、クエリに対して返されるすべてのファセットを含めることができます」ということも理解しています。他の誰かも正しく答えました。
これを読んでも理解できないのは、私が見たすべての回答と本に基づいて、FQの方がはるかに優れているように見えるため、なぜ誰もがQを使用するのかということです。
例外として、おそらく両方が存在する理由があると確信しています。
私が望むのは、私のユースケースに最適なものを見つけ出すことです.ドキュメントには有用な例が非常に欠けています.
- 私のドキュメントには、日付、クライアント、レポート、およびその他のフィールドがあります
- 1 営業日 = 350 万ドキュメント。
- ドキュメントの総数は 2 億 5000 万であり、数えています (60 の日付 * 8000 のクライアント * 1000 のレポート)
- 日付、クライアント、レポートをファセットし、ファセットのタグ付けを使用します。
- UI 全体は、左側にファセットがある Amazon などの e コマース サイトのように見えます。
- スコアリングは使用しません。
ビジネス ルール #1: 日付はすべてのクエリに常に存在する必要があります。
ビジネス ルール #2: クエリの 99% は最新の日付を使用しますが、ランダムなクライアントとランダムなレポートを使用します。
事実: 遅いのは検索ではなくファセットであると判断しました。
質問:
この検索条件と、クエリを作成する次の方法があるとします。
A) q=date:20130214 AND client:Joe & facet.field=date & facet.field=client...
B) q=date:20130214 & fq=client:Joe & facet.field=date & facet.field=client...
C) q=client:Joe & fq= date:20130214 & facet.field=date & facet.field=client...
D) q=*:* & fq=date:20130214 & fq=client:Joe & facet.field=date & facet.field=client...
- 上記のどれが一番良いと思いますか?その理由は? ほとんどのクエリは 20130214 に対して実行されることに注意してください。
- FQ フィルタリングで最初に行われ、次に Q 条件が適用されますか、それともその逆ですか?
現在、すべてのケースで D) が使用されていますが、これは間違っていると思われ、Solr (バージョン 3.6) で OOM が発生しています。
ご協力ありがとうございました!