web-dev-qa-db-ja.com

複数のSOLRコアを検索して1つの結果セットを返す

SOLRにはいくつかのコアの設定があり、これらのコア全体を検索して単一の結果セットを返したいと考えています。

もう少し背景:内部ブログエンジンにインデックスを付けるSOLRコアがあります。また、CMSシステムにインデックスを付けるSOLRコアもあります。これらの両方のコアを検索し、単一の結果セットを表示します。

ドキュメントに関連するエンティティがあることは承知していますが、メンテナンスを容易にし、冗長性を持たせるために、コアを分離したままにしたいと考えています。

SOLRを検索するためのラッパーとしてSolrSharpを使用しています。どんなアドバイスや指示もいただければ幸いです。

28
Rihan Meij

Solr 1.3以降、Solrには適切なマルチコア検索機能があります。 shardsパラメーターを使用して複数のコアにわたってクエリを実行し、結果を1つのデータセットとして返す方法について説明している 分散検索 の記事をお読みください。

21
Brian

複数のコアにわたって単一のクエリを実行する方法はありません。別の答えで言及されている分散検索は、システム間でインデックスを分割しているシャードに関係しています。

実際、複数のコアは実際にはそれぞれに異なる構造を格納するためのものであり、複数のコアをクエリすることは意味がありません。以前のコメントで述べたように、すべてのフィールドを保持する追加のコアを使用できます。ただし、この新しいコアのフィールドの名前を変更して、類似した名前付きでタイプの異なるフィールドの両方を格納できるようにする必要がある場合があります。

19

マシューの答えは正確です。シャードとマルチコアはリンゴとオレンジです。複数のコアにわたって単一のクエリを統合することはできません。コアごとに個別のクエリを実行する必要があります(http:// localhost:8983/solr/core0/select?q = 、http:// localhost:8983/solr/core1/select?q = )。ただし、シャードでは(http:// localhost:8983/solr/select?shards = localhost:8983/solr、localhost:8984/solr&q = )。

3
Morris

分散検索が正解です。ハンドラーで直接分散検索を構成することをお勧めします。ハンドラーでlocalhostを構成できますが、外部でsolrを呼び出すこともできます。これで、構成されたすべてのコアを自動的に検索する検索ハンドラーを呼び出すことができます。

http:// solrhost:8983/solr/core1?q =

<requestHandler name="/multicore" class="solr.SearchHandler">
  ...
  <lst name="invariants">
    <str name="shards">localhost:8983/solr/core1,localhost:8983/solr/core2</str>
  </lst>
</requestHandler>
1
Matthias M