2

インデックス全体を構成する6つのコアを使用しています(800万のドキュメント、6つのコアに分散)。ドキュメントを削除したい場合(たとえば、deleteByIdまたはdeleteByQuery)、特定のドキュメントがどのコアにあるかわからないため、6回の削除呼び出しを行う必要があるようです。これは正しいですか?

検索するとき、検索に「shards」パラメーターを指定すると、Solrはすべてのコアを検索します。削除するとき、これは真実ではないようです。

複数のコアにまたがる1回の呼び出しでドキュメントを削除する方法はありますか?

4

1 に答える 1

2

シャードDocTransformerを有効にして、クエリ中にドキュメントが見つかったシャードを返すことができるようです。これを利用することで、削除するドキュメントのクエリを実行し、結果からシャードID(またはこの場合はコア)を取得して、削除コマンドを適切なコアに送信できます。確かに、これは最初は追加のクエリですが、コアごとに1つではなく、ドキュメントごとに1つの削除要求を行うだけで済みます。

ドキュメントはこれを設定するのに少し余裕があるので、私はいくつか掘り下げました。これを有効にするには、solrconfig.xmlファイルに以下を追加する必要があると思います。

     <transformer name="shard" 
         class="org.apache.solr.response.transform.ShardAugmenterFactory"/>

ShardAugmenterFactoryのソースを調べることで、要求でシャードが使用されているかどうかを検出し、応答でシャード出力を有効にします。

于 2013-03-14T18:39:22.193 に答える