3

必要なものは、フィルターとしてではなく実際のクエリであることを除いて、ここで説明されているものと似ています: http://lucene.472066.n3.nabble.com/filter-query-from-external-list-of-Solr-一意のID-td1709060.html

SOLR 検索と外部フィールドの検索を組み合わせることができるクエリ パーサー/スコアラーを実装したいと考えています。これは、ドキュメント内のフィールドのみを更新する必要がある場合でも、ドキュメント全体を更新する必要があるという制限によるものです。

たとえば、document_id、attribute_id という 2 つの列を含む document_attributes というデータベース テーブルがあります。document_id は、索引付けされたドキュメントの ID に対応し、SOLR です。

次のようなクエリを渡すことができるようにしたいと考えています。

attribute_id:123 OR text:some_query (attribute_id:123 OR attribute_id:456) AND text:some_query など...

上記のクエリを解析し、attribute_id に関連付けられた document_ids をフェッチし、結果を SOLR 検索の通常の処理と組み合わせて、クエリ全体に対して 1 セットの結果を返すことができるプラグイン/モジュールを SOLR に実装できますか。

可能であれば、これを実装する方法についてのガイダンスをいただければ幸いです。

4

1 に答える 1

1

参照された質問によって提供されるアドバイスを、資格を付けて繰り返します。

Solr < 4.0 の場合、考慮すべき 2 つのアプローチは次のとおりです。

  • solr にクエリを実行する前に DocumentID ルックアップを実行し、ドキュメント ID のリストを使用して solr にクエリを実行します (例: fq=(docid:1 OR docid:5))

  • データベース クエリを実行して属性 ID をドキュメント ID に置き換える独自の派生SolrQueryParserfq=attribute:1を作成します (eqはクエリパーサーによって に展開されますfq=(docid:1 OR docid:5)) 。

決定は、Solr に送信するドキュメント ID の数を中心に展開する必要があります。小さい、またはイベント中程度 (数百としましょう) のドキュメント ID の場合、ID を filterQuery として送信するのが最善の方法です。大量または非常に多数の documentid を送信する可能性がある場合は、ケースに合わせてクエリパーサーを拡張することが適切な戦略です。クエリ パーサーを拡張する場合は、専用の (デフォルトではない) リクエスト ハンドラーで実行し、キャッシングなどの側面を組み込んで、結果のパフォーマンスが高いままであることを確認することを検討してください。

Solr 4.0 以降では、クロスコア結合の使用を検討することもできます。既存の Solr コアをそのままにして、document:attribute 関係をインデックス化する新しいコアを作成することができます。これにより、ドキュメント全体の更新に関する懸念が軽減され、メモリ内の Solr でクエリ全体を実行できるようになります。

于 2013-08-26T17:26:41.847 に答える