我们目前正在优化Elasticsearch索引的切分设置,以减少响应时间。当前,路由密钥的数量等于碎片的数量。我们正在寻找一个设置,其中--一个碎片中的所有文档都是一个路由密钥--只有。
这就是现在的情况和它应该是什么样子。
电流
想要
是否有可能确保一个路由密钥只被路由到一个碎片?目前,我们正在面临空碎片,这似乎不是一个合适的解决方案。
我们知道路由是基于5.50版本的Murmur (参见: Murmur3HashFunction.java)。有没有任何选项可以影响这种行为,有人能提供更深入的洞察力,路由是如何内部工作的。
发布于 2017-11-10 12:53:23
总结一下结果:是不可能的.
为什么?对于大多数用例而言,路由不是直接基于路由密钥的,因为如果路由密钥的分布是这样的(不是针对我的情况,一般情况下可能是这样),那么文档的分发可能会以非常不平等的方式结束。路由密钥的散列实现了这一点,即使是具有特定路由的文档的消失也不会以空碎片结束。
您可以根据使用的哈希函数(Murmur)的知识创建一个解决方案,但如果Elasticsearch决定更改散列函数,这可能会中断。这种情况已经发生了,所以依赖于这样一个隐藏的特性是不可取的。
实现这一目标的唯一方法是为每个路由密钥创建一个索引,Val指出了这一点。
https://stackoverflow.com/questions/46808084
复制相似问题