根据elasticsearch的documentation,在创建索引时可以在索引级别设置
routing_partition_size
。这允许我们将自定义路由值下的文档索引到分片的子集,这允许我们以每个请求搜索更多分片为代价跨分片分布数据。或者,如果未指定routing_partition_size
,我们将面临最终导致集群不平衡的风险,因为路由值下的每个文档仅索引到单个分片。
我的问题是:为什么设置只允许在索引级别配置?例如,考虑具有文档集合的场景,其中每个文档代表属于特定供应商的库存中的产品。
我们使用 supplier_code 作为自定义 _routing 值来索引每个文档。大多数供应商的库存足够少,因此将
small
供应商下的所有文档存储在一个分片中是合理的(即不使用 routing_partition_size)
然而,有少数大型供应商拥有足够充足的库存。我们想将
large
供应商下的文档索引到分片的子集(即使用 routing_partition_size)。这将防止某些分片成为大型供应商搜索查询的瓶颈。
以elasticsearch的当前配置,我只能决定在索引级别使用routing_partition_size,这意味着我也需要为小卖家搜索多个分片(这并不理想)。