Elasticsearch已排序索引更新数据后是否仍遵循排序规则?
Elasticsearch 索引排序更新规则解答
结论
你描述的场景中,修改GuyD的Counter值为1000后,最终索引排序会将GuyD调整到首位,结果为:
GuyD;1000 - GuyA;150 - GuyB;101 - GuyE;90 - GuyC;74
更新操作和插入操作遵循完全相同的索引排序规则,修改排序字段值的更新操作会自动触发索引重排,维持索引的有序性。
核心原理说明
- ES文档的不可变特性:Elasticsearch中的文档本质是不可修改的,你调用POST更新脚本的操作,底层实际执行三个步骤:
- 检索到原GuyD对应的文档
- 标记旧文档为已删除状态
- 写入修改了Counter字段值的新GuyD文档
- 索引排序的生效时机:你配置的
index.sort规则是在段(Segment)写入阶段生效的,所有新写入到段的文档(无论是新增文档还是更新产生的新文档)都会遵循配置的排序规则排序。 - 段合并的补充保障:即使更新后的新文档最初写入到临时的小分段中,后续ES后台执行段合并操作时,合并生成的新分段也会按照全局的
index.sort规则重新排序,最终保障整个索引的有序性。
内容的提问来源于stack exchange,提问作者Igor Beaufils
相关产品推荐
相关产品推荐

