私は同じ質問にすべての答えを読んで、私は私のユースケースに使用する必要があります、そして、なぜそれを明確にしていません。 どちらも同じ結果を返します。 誰かが正しく答えたように、「FilterQueryがキャッシュされて全体的なクエリ時間が短縮される」と理解しています。solrメインクエリとfq
「フィルタリングでもファセットのタグ付けができるので、他の人も正しく答えたように、ファセットにタグを付けてクエリに返されるすべてのファセットを含めることができます」と理解しています。
私がこれを読んで理解していないのは、FQがこれまでのすべての答えと本に基づいて、ずっと優れているようだから誰もQを使う理由です。
を除いて、私には両方とも存在する理由が考えられます。
私が望むのは、私のユースケースに最適なものを見つけ出すことです。有用な例では、ドキュメントには欠けています。
- 私の文書があります:日付、クライアント、レポート、およびいくつかの他のフィールド
- 1営業日= 350万件のドキュメントを。
- 合計の文書数は2億5,000万であり、カウント(60日付* 8000クライアント* 1000レポート)
- 私はファセットの日付、クライアント、レポートのファセットを使用しています。
- UI全体は、任意の電子商取引サイトのように見えます。例:Amazon、左側にファセットがあります。
- スコアリングは使用されません。
ビジネスルール#1:日付は常にすべてのクエリに存在する必要があります。
ビジネスルール#2:99%のクエリでは最新の日付が使用されますが、ランダムなクライアントとランダムレポートが使用されます。
A事実:私たちは、それが探索ではなくゆっくりとしているファセットであると判断しました。
質問:
A)Q =日付:20130214とクライアント:
この検索条件、およびクエリを記述するために、これらの方法を考えるジョー& facet.field =日付& facet.field =クライアント...
B)Q =日付:20130214 & FQ =クライアント:ジョー& facet.field =日付& facet.field =クライアント...
C)Q =クライアント:ジョー& FQ =日付:20130214 & facet.field =日付& facet.field =クライアント...
D)Q = *:* & FQ =日付:20130214 & FQ =クライアント:ジョー・& facet.field =日付& facet.field =クライアント...あなたは最高、なぜだろうと思います上記の
- ?覚えておいて、ほとんどのクエリは、最初にFQフィルタリングが行われた後、Q条件が適用されるか、または逆の場合に、20130214
- に対して実行されます。
今日私はD)がすべてのケースで使用されていますが、これは間違っていると思われ、Solr(バージョン3.6)でOOMを引き起こしています。
ありがとうございました!
ご返信ありがとうございます。私がfq = 20130214&q = client:Paigeと言う場合、Solrは最初にクライアントのために2億5,000万の文書をスキャンしなければならないのでしょうか?それとも、それらをフィルタリングして日付20130214のものだけを残しますか?もしそうなら、最初にすべてのものを見つけ出し(350万文書)、クライアントに基づいてフィルタリングする方が効率的ではないでしょうか?さらに大きな疑問:両方のシナリオを試すことができるツールはないように思われるので、どうすればわかるでしょうか。 –
はい、フィルタ検索は、メイン検索が実行された後に実行されます。しかし、あなたの文書番号に基づいて、 'q = 20130214&fq = client:Paige'を切り替えて、日付が書かれた350万の文書を検索し、それらをフィルタリングして正しいクライアント。どのように正しいアプローチを決定するのは難しくなく、速くない、それはニーズとシナリオに依存する。クエリをテストするためのツールとして、私はSolrMeterを強く勧めます - http://code.google.com/p/solrmeter/ –
Thanks Paige。 あなたは2つの異なる返答で(ビジネスルールと数字に基づいて)異なる回答をしたので、元の質問を明確にしました。 もう一度ご覧ください。 また、SolrMeterは、Solrがどのように処理しているか、どのような順番で、どのような順番で、何が見つかったかなどを示していません。 Sybase(またはRDBMS)をよく知っている方は、 'set showplan on'と同じです。 ありがとう、 - ドミトリー。 –