暗黙のシャーディング後にドキュメントが失われるのを防ぐ

トピック作成者:ks-solruserml-bot (2024/09/11 21:38 投稿)
3
OpenOpen

(The bot translated the original post https://lists.apache.org/thread/lb6jy9ddlwd09xlq3x5tdgkoggs8y7nj into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

Solr開発者の皆さん、

問題の説明

私たちはSolr Cloudを使用しており、データを8つのシャードに分割していました。しかし、応答時間を短縮するために、データをさらに細かくシャーディングすることを考えました。

そのため、応答時間を短縮するために、Solrデータを56のシャードに分割することを計画しました。このシャーディング戦略に従って、ドキュメントのシャードを決定するために、マルチバリューフィールドの値の1つを使用しています。

しかし、これによりドキュメントの一部が失われる問題が発生しました。

問題の発生状況

例を用いて問題を説明します。

以下の3つのSolrドキュメントを考えます:

Doc1

{
  "FieldA": "id21, id29, id60P",
  "Field2": "val2"
}

Doc2

{
  "FieldA": "id19, id9, id8P",
  "Field2": "val1"
}

Doc3

{
  "FieldA": "id101, id29, id108P",
  "Field2": "val4"
}

Solrでのクエリ

次のクエリを考えてみます--- fq=FieldA: id21+id8+id108;

以前のシャーディングでは、Doc1、Doc2、およびDoc3が結果として返されていました。なぜなら、このフィルタークエリは、それぞれのドキュメントの少なくとも1つの値と一致していたからです。つまり、Doc1にはid21が、Doc2にはid8が、Doc3にはid108が含まれています。

しかし、新しいシャーディングでは、Doc2とDoc3のみが結果として返され、Doc1は結果に含まれません。なぜなら、このクエリはフィルタークエリに対応するシャード(shard21、shard8、shard108)にのみルーティングされ、Doc1はshard60に存在するためです。

インデックス作成とクエリの問題

このコレクションにクエリを実行しても、ドキュメント1が含まれるシャードにクエリが送信されないため、結果にドキュメント1が返されません。

考えられる解決策

この問題に対処するために、フィールドのすべての値に基づいて、同じドキュメントを複数のシャードにインデックス化することが考えられます。しかし、このフィールドの値が変更された場合、インデックス作成や削除の処理が非常に複雑になります。そのため、このインデックスの維持は非常に困難です。

これが最適な方法でしょうか?それとも、目標を達成しつつ、ドキュメントが失われないようにするためのより良い方法があるのでしょうか?

返信投稿者:ks-solruserml-bot (2024/09/11 21:39 投稿)

皆さん、

再度お知らせします。どなたか助けていただけませんか?

返信投稿者:ks-solruserml-bot (2024/09/11 21:39 投稿)

間違っているかもしれませんが、ソースドキュメントの値に基づいてシャーディングするのではなく、ランダムにシャーディングしたほうが良いかもしれません。そうしないと、特定の検索が一部のシャードにしかヒットせず、過負荷になる可能性があります。このことが、以下の挙動の原因かもしれません。

Charlie

返信投稿者:ks-solruserml-bot (2024/09/11 21:39 投稿)

複数値フィールドはルーティングフィールドとしてサポートされていないと思っていました。おそらく、単一ドキュメントに複数の異なる値を持つフィールドの値ではなく、単一値の安定したプロパティをルーティングに選択する必要があります。

そのため、スキーマ内の他の候補となる単一値のルーティングフィールドを確認してください。見つからない場合は、CompositeID(つまりハッシュベース)の方が適しているかもしれません。CompositeIDを使用して8つのシャードを持つ場合、既存のシャードを分割して簡単に16 -> 32 -> 64に拡張できます。しかし、その場合も、より効率的なクエリを実行し、毎回すべてのシャードにヒットしないようにするためには、安定した単一値のIDを使用してルーティングする必要があります。

https://solr.apache.org/guide/solr/latest/deployment-guide/solrcloud-shards-indexing.html

Jan

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?