关于 ES 文档删除与 merge segment 的两个问题
来源:6-9 -shard详解

加肥喵
2018-11-12
求教老师有两个问题:
- ES 删除文档其实是在 .del 文件记录 文档 id 使其不被查询到,是不是说其实文档在磁盘是不可删除的,这样会导致 ES 占用空间无限增大么?
-
- 删除 .del 文件会导致其记录对应的文档被删除么?
写回答
1回答
-
segment 文件一旦生成就不可修改,而且每个文档都有1个唯一的内部 Id,该 Id 不同于文档 Id,是 lucence 自动生成的。当 es 删除文档的时候会在.del文件里面用其唯一内部 Id标记该文档被删除了。当实际在该 segment 上做查询时,被删除的文档也会被匹配,但在返回前会检查下.del 中是否文档已经被删除,如果是,那么就把该文档从赶回结果中剔除。文档真正被删除是在做 segment 合并的时候,在这个过程中会将已经删除的文档去除。segment 合并的过程 es 有内部机制自动进行,当然你也可以通过 force merge api 主动触发它。因此 es 占用空间不会无限增大。
如上所述,删除.del文件是不会导致对应文档删除的,只有 segment merge 的时候才是真正删除。而且你不能自己去删除.del 文件
012018-11-12
相似问题