为什么elasticsearch不使用指定的index.routing_partition_size?(自定义路由)

sr4lhrrt  于 2023-08-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(92)

我在elasticsearch 8.7.1上使用自定义路由,除非我手动指定number_of_routing_shards,否则routing_partition_size似乎没有按预期实现。
例如,如果我不指定number_of_routing_shards并使用以下设置:第一个月
然后我用_routing字段迁移了100万个文档,实际使用的分片数量只有1个。
现在,如果我像这样添加number_of_routing_shards = number_of_shards:{ "index": { "number_of_shards": "128", "number_of_routing_shards": "128", "routing_partition_size": "5", "number_of_replicas": "1" } }
然后,routing_partition_size中指定的正确数量的分片(5)最终被搜索时的路由键使用。类似地,如果我设置number_routing_shards = 2*number_of_shards,那么每个路由键使用的分片就是routing_partition_size/2。
看起来number_of_routing_shards和number_of_shards之间有联系,但我在网上找不到任何信息来解释为什么会这样。
我知道工艺路线公式(使用自定义工艺路线时)如下所示:routing_value = hash(_routing)+ hash(_id)% routing_partition_size shard_num =(routing_value % num_routing_shards)/ routing_factor
为什么会这样呢?
尝试了许多不同的配置,阅读elasticsearch文档

6psbrbz9

6psbrbz91#

在Elasticsearch中使用自定义路由时,路由分片的数量(number_of_routing_shards)决定了路由使用的分片数量。如果不指定此设置,则无论所需的分区大小(routing_partition_size)如何,都只使用一个分片进行路由。要确保分区大小正确实现,请将number_of_routing_shards设置为索引中的主分片数(number_of_shards)。这将确保根据指定的分区大小使用预期数量的分片进行路由。

相关问题