我们目前正在优化我们的Elasticsearch索引的分片设置,以(惊喜)减少响应时间。目前,路由密钥的数量等于分片的数量。我们正在寻找一个设置,其中分片中的所有文档只有一个路由键。
这就是现在的情况以及它应该是什么样子
当前
通缉
是否有可能确保一个路由密钥仅路由到一个分片?目前我们面对空分片,这似乎不是一个合适的解决方案。
我们知道路由是基于版本5.50中的Murmur(参见:Murmur3HashFunction.java)。是否有任何选项可以影响这种行为,有人可以提供更深入的见解,路由如何在内部工作。
答案 0 :(得分:0)
总结结果:这是不可能的。
为什么?为了适用于大多数用例,路由不直接基于路由密钥,因为如果路由密钥的分发,文档的分发可能以非常不平等的方式结束是这样的(不是我的情况,但一般情况下可能)。路由密钥的散列实现了这一点,甚至具有特定路由的文档的消失也不会以空的碎片结束。
您可以根据所使用的散列函数(Murmur)的知识创建变通方法,但如果Elasticsearch团队决定更改散列函数,则可能会中断。而这种情况已经发生了,所以依靠这样一个隐藏的功能并不值得。
实现此目的的唯一方法是为Val指出每个路由密钥创建一个索引。