字段update为空但是空间仍然没有缩小

默认分类 | 作者 code4j | 发布于2019年09月02日 | 阅读数:116

es的更新机制其实是插入一个新数据,然后用新版本替换老版本被检索出,在底层Lucene merge的时候 将老版本删除掉。
 
基于这个大前提,我现在想清理一批索引字段,每个doc都有一个  content字段,内容比较多,处理方法是取出原始doc,然后拼接成map后把content key干掉,组装成json再放回去。
 
按我的思路,这样新的没有content的文档写进去,写入过程会有短暂磁盘使用升高的情况,但是老的文档再merge期间就会被干掉,空间还会降下来。
 
但是实际上,执行完一批update后,确认content字段的内容已经都清理掉了,总的磁盘空间上来了,merge后降下来一点点,占用空间仍然比update前大。。 
 
求问这种 想清理某个字段以达到降低空间使用率的需求,如果这样实现不了,难道只有一个个重建索引么
已邀请:

weizijun - elasticsearch fan

赞同来自:

有试过forceMerge成一个segment吗?
你说的merge是es自发进行的还是你手动执行forceMerge的? 

God_lockin

赞同来自:

原来是一个content字段,mapping就一个field,你更新之后变成了一个json,不是会变成更复杂的field么?这样占用空间变大了不是很正常?

要回复问题请先登录注册