2013-07-12 11 views
5

私の問題は、検索可能なSolrのn個のフィールド(約10個)があり、すべてインデックスされて保存されているということです。私は500のドキュメントの平均のあたりでヒットする5000のドキュメントの私の全体のインデックスで最初にクエリを実行したいと思います。次に、私はこれらの500のドキュメントではなく、インデックス全体で異なるキーワードセットを使用してクエリを行いたいと思います。Solrの複数のクエリ

私が最初にクエリを送信するとスコアが生成されます。クエリを2回実行すると、生成された新しいスコアは以前のクエリの500個のドキュメントに基づいている必要があります。つまり、Solrはこれらのみを考慮する必要があります全体のインデックスとして500ドキュメント。

これを要約すると、5000のインデックスは500に、次に50(5000> 500> 50)にフィルタリングされます。その基本的なフィルタリングが、私はSolrでこれをしたいと思います。

私は妥当な基礎知識とまだ学んでいます。

更新:数学的に表現した場合には、次のようになります。

results1=f(query1) 
results2=f(query2, results1) 
final_results=f(query3, results2) 

私はこれが唯一の50件の結果が表示され、プログラムとエンドユーザーを使用して達成ようにしたいと思います。だからファセットはオプションではありません。

答えて

3

Filter queries (fq)は、迅速な制限を行うように特別に設計されています得点計算を行わないことによって得られた結果の

したがって、最初のクエリをfqパラメータに入れ、2番目のスコア生成クエリを通常の 'q'パラメータに入れると、それはあなたが求めるものです。

a question discussing this issue from the opposite directionも参照してください。

+0

サンクスアレクサンドル、私の最初のテストに基づいて私はそれが私の問題を解決すると言うことができます。また、撮影された時間はGusの解よりはるかに少ないことがわかります。あなたとGusのソリューションの組み合わせは私の問題を包括的に解決するはずです。 – user2575429

0

Solrからの "ファセット検索"を見てください:http://wiki.apache.org/solr/SolrFacetingOverviewこれは、このような "反復"検索に役立ちます。

text:"roses are red" AND _query_:"type:poems" 

あなたがここにネストされたクエリについての詳細を読むことができます:私はあなたがこのようなネストされたクエリを使用したいと考えてい

+0

私はファセットについて知っていますが、私はそれを使いたくありません。ドリルダウンの部分は、私はプログラムでそれをしたいと思います。エンドユーザーには、50個の結果の最終セットのみが表示され、それ以外は表示されません。 最初のクエリの後、全く異なるパラメータで得られた結果について2番目のクエリを実行したいと思います。 – user2575429

2
+0

Thanx Gus、私はこれが私の要件の良いアプローチだと思っています。私はそれを詳しく調べて、いくつかのテストを行い、それがどのように機能するかを見ていきます。私はあなたの助けに感謝します。 – user2575429

5

二つの可能性の高い実装が私に起こります。最も簡単な方法は、最初のクエリを2番目のクエリに追加することです。

+(first query) +(new query) 

これは、フィルタをかけたい最初のクエリが頻繁に変更される場合に適しています。最初のクエリは、文書のカテゴリのようなもの、またはあなたが同じフィルタの再利用の恩恵を受けることができる何か似ている場合、フィルタクエリはfq parameterを使用して、より良い方法である、何かのように:

q=field:query2&fq=categoryField:query1 

フィルタクエリはフィルタするドキュメントIDのセットをキャッシュします。したがって、カテゴリ、一般的な日付範囲などの一般的に使用される検索では、パフォーマンスの大幅な向上が得られます(珍しい検索やユーザー入力の検索文字列の場合結果をキャッシュするために必要以上のオーバーヘッドが発生し、無駄な結果セットでキャッシュを汚染する)