2017-10-18 3 views
1

現在、Elasticsearchインデックスのシャーディング設定を最適化して応答時間を短縮しています(驚き)。現在、ルーティングキーの量は、シャードの量と同じです。 シャード内のすべてのドキュメントが1つのルーティングキーであるであるセットアップを探しています。弾性検索ルーティング:シャードごとに1つのルーティングキーを持つドキュメントのみ

これは、それが現時点ではどのようにされ、どのようにそれが

現在

  • シャードのようになります:0 - >路線:BMX、cyclocrosser
  • シャード:1 - >路線:トラック自転車
  • シャード:2 - >ルート:
  • シャード:3 - >ルート:下り坂

  • シャード募集:0 - >ルート:BMXを
  • シャード:1 - >ルート:トラック自転車
  • シャード:2 - >ルート:cyclocrosser
  • シャード。 3 - >ルート:下り坂

ルーティングキーがであることを確認する可能性はありますか1つのシャードにのみ?現時点では、が空のシャードに直面していますが、これは適切な解決策ではありません。

ルーティングはMurmurバージョン5.50(Murmur3HashFunction.javaを参照)に基づいています。この動作に影響を与えるオプションはありますか。誰かがより深い洞察を提供し、ルーティングが内部的にどのように機能するかを知ることができます。

+0

組み込みルーティングでは、すでにすべてのシャードでドキュメントが均等に分配されています。特定の値に基づくカスタムルーティングでは、ルーティング値ごとに同じ数のドキュメントがある場合にのみ、同じことが達成されます。 – Val

+0

ドキュメントは、ルーティングキー上にほぼ均等に分散されています。これが、1つのシャードに1つのルーティングキーを「割り当てる」理由です。 –

+0

ルーティングキーのセットが永続的に安定していますか?つまり、何らかの理由で新しいルーティングキーが必要な場合はどうなりますか? – Val

答えて

0

結果を要約すると:これは不可能です。

なぜですか?ほとんどの場合、ルーティングキーはルーティングキーに直接基づいているわけではありません。ルーティングキーの配布がそうであれば、ドキュメントの配布は非常に不均等になる可能性があります(私の場合ではなく一般的ですそれは可能性があります)。ルーティングキーをハッシュするとこれが達成され、特定のルーティングを持つ文書が消滅しても空のシャードにはなりません。

使用されているハッシュ関数(Murmur)の知識に基づいて回避策を作成できますが、Elasticsearchチームがハッシュ関数を変更することを決定した場合、これが壊れる可能性があります。そして、これはすでに起こっているので、隠された機能に頼るのは賢明ではありません。

これを実現する唯一の方法は、Valによって指摘されているように各ルーティングキーに対して単一のインデックスを作成することです。

関連する問題