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