Elasticsearch 字段更新机制

发布时间:2024年01月18日

目录

不支持原地更新

更新过程

段合并(Segment Merge)

结论


不支持原地更新

? ? Elasticsearch 不支持原地更新(in-place update)索引中的单个字段。由于 Elasticsearch 使用了不可变的倒排索引,一旦文档被写入,它就不能被修改。

更新过程

? 当需要更新文档中的一个或多个字段时,Elasticsearch 实际上执行以下步骤:

?1. 检索现有文档

? Elasticsearch 首先根据文档的 _id 查找到需要更新的文档。

?2. 创建新文档

? ?然后,Elasticsearch 创建一个新的文档版本,这个新版本包含了原始文档的内容以及所做的更新。

?3. 删除旧文档

? ?新文档被索引后,旧的文档被标记为删除,但实际上并不会立即从物理存储中移除。这些被标记为删除的文档在后续的段合并(segment merge)过程中会被清理。

?4. 索引新文档

? ?新文档随后被添加到索引中,这样搜索操作就能够检索到最新版本的文档。

段合并(Segment Merge)

? ? ?Elasticsearch 定期执行段合并,以维护索引的健康状态和性能。在这个过程中,多个小的段(segments)会合并成更大的段,同时清除已删除文档的数据。

结论

? ?在 Elasticsearch 中,更新字段实际上是通过检索重建并重新索引文档的过程完成的而不是原地直接修改单个字段。这种机制确保了索引的不可变性,但也意味着更新操作比简单的字段修改要复杂和代价更高。了解这一点对于优化 Elasticsearch 的使用和性能至关重要。

文章来源:https://blog.csdn.net/u014745465/article/details/135671463
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。