2017-10-18 48 views
1

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

这是怎么回事,此刻,它看起来应该像

当前

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

求购

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

是否有任何可能确定,一个路由键将是路由只有一个碎片?目前我们是面对空的碎片,这似乎不是一个合适的解决方案。

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

+0

内置路由已经实现文档在所有分片上的平均分配。如果每个路由值的文档数量相同,则基于特定值的自定义路由只能实现相同的功能。 – Val

+0

该文件或多或少均匀分布在路由密钥上。这就是为什么要将一个路由密钥“分配”到一个分片的原因。 –

+0

您确定您的一组路由密钥是永久稳定的吗?例如,如果由于某种原因需要在某个时候需要新的路由密钥,会发生什么情况? – Val

回答

0

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

为什么?为了适用于大多数使用情况,路由不是直接基于路由密钥,因为如果路由密钥的分布类似于文件的分发,那么文档的分发可能以非常不均匀的方式结束(不是针对我的情况,而是针对有可能)。路由密钥的哈希实现了这一点,甚至具有特定路由的文档的消失也不会在空的分片中结束。

如果Elasticsearch团队决定更改散列函数,您可以基于所使用的哈希函数(Murmur)的知识创建一个解决方法,但这可能会中断。而这种情况已经发生,所以依靠这种隐藏功能并不是节省。

实现此目的的唯一方法是通过为Val指出的每个路由键创建单个索引。

相关问题