目前,我们在索引中保存文档时设置了_id的值。但是,这样做可以避免Elasticsearch自己计算_id,从而强制文档存储在特定的碎片中。实际上,有些碎片可能会比其他碎片大得不成比例。因为Elasticsearch根据文档的_id将文档放置在相应的shard上。
有没有一种方法可以在保持文档_id设置的同时平衡碎片?
目前,我们在索引中保存文档时设置了_id的值。但是,这样做可以避免Elasticsearch自己计算_id,从而强制文档存储在特定的碎片中。实际上,有些碎片可能会比其他碎片大得不成比例。因为Elasticsearch根据文档的_id将文档放置在相应的shard上。
有没有一种方法可以在保持文档_id设置的同时平衡碎片?
2条答案
按热度按时间cld4siwp1#
Tldr;
在均匀分布的值上创建custom routing。
即:摄取时间(如果连续索引数据)。
1sbrub3j2#
正如已经提到的,您需要一个自定义的路由。如何使用SpringDataElasticsearch来实现这一点,请参见参考文档。
请记住,当使用自定义路由来存储实体时,在执行存储文档时使用的
get(id)
或delete(id)
时,必须提供相同的路由值。我读了elasticsearch documentation,默认情况下路由是如何计算的,我可能不会尝试实现自定义的分片分发方法,但这是我个人的看法。