Elasticsearch路由:仅每个分片具有一个路由密钥的文档

时间:2017-10-18 10:30:09

标签: elasticsearch routing

我们目前正在优化我们的Elasticsearch索引的分片设置,以(惊喜)减少响应时间。目前,路由密钥的数量等于分片的数量。我们正在寻找一个设置,其中分片中的所有文档只有一个路由键

这就是现在的情况以及它应该是什么样子

当前

  • 碎片:0 - >路线:bmx,cyclocrosser
  • 碎片:1 - >路线:轨道自行车
  • 碎片:2 - >路线:
  • 碎片:3 - >路线:下坡

通缉

  • 碎片:0 - >路线:bmx
  • 碎片:1 - >路线:轨道自行车
  • 碎片:2 - >路线:cyclocrosser
  • 碎片:3 - >路线:下坡

是否有可能确保一个路由密钥仅路由到一个分片?目前我们面对空分片,这似乎不是一个合适的解决方案。

我们知道路由是基于版本5.50中的Murmur(参见:Murmur3HashFunction.java)。是否有任何选项可以影响这种行为,有人可以提供更深入的见解,路由如何在内部工作。

1 个答案:

答案 0 :(得分:0)

总结结果:这是不可能的。

为什么?为了适用于大多数用例,路由不直接基于路由密钥,因为如果路由密钥的分发,文档的分发可能以非常不平等的方式结束是这样的(不是我的情况,但一般情况下可能)。路由密钥的散列实现了这一点,甚至具有特定路由的文档的消失也不会以空的碎片结束。

您可以根据所使用的散列函数(Murmur)的知识创建变通方法,但如果Elasticsearch团队决定更改散列函数,则可能会中断。而这种情况已经发生了,所以依靠这样一个隐藏的功能并不值得。

实现此目的的唯一方法是为Val指出每个路由密钥创建一个索引。