暗黙のシャーディング後にドキュメントが失われるのを防ぐ
(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が返されません。
考えられる解決策
この問題に対処するために、フィールドのすべての値に基づいて、同じドキュメントを複数のシャードにインデックス化することが考えられます。しかし、このフィールドの値が変更された場合、インデックス作成や削除の処理が非常に複雑になります。そのため、このインデックスの維持は非常に困難です。
これが最適な方法でしょうか?それとも、目標を達成しつつ、ドキュメントが失われないようにするためのより良い方法があるのでしょうか?
トピックへ返信するには、ログインが必要です。