Elasticsearch(简称 ES)底层的核心依赖是 Lucene。要理解 ES 的更新(Update)和删除(Delete)机制,首先必须理解一个核心概念:Lucene 的段(Segment)是不可变的(Immutable)。 这意味着一旦数据被写入到一个段文件中,就不能再被修改。 基于这个前提,ES 的更新和删除操作实际上采用了一种 “逻辑删除” + “追加写入” 的策略,具体实现如下: --- 1. Delete(删除)操作的实现 当你向 ES 发送一个删除请求时,数据并不会立即从磁盘文件中抹去。 1. 逻辑删除(标记): ES 会在内部维护一个名为 的特殊文件。 当执行删除操作时,ES 只是在该文件中将目标文档的 ID 标记为“已删除”。 此时,该文档的数据依然存在于原本的 Segment 中,占用着磁盘空间。 2. 搜索时的处理: 当你执行搜索请求时,ES 依然会扫描到这些被标记为删除的文档。 但是,在返回结果之前,ES 会根据 文件过滤掉这些文档,因此用户在搜索结果中看不到它们。 2. Update(更新)操作的实现 由于 Segment 不可修改,ES 无法像 ...