【elasticsearch】删除文档后如何释放存储大小
在使用 Elasticsearch 的过程中,经常会有删除某个索引历史数据的需求。比如存储飞机票信息的索引,通常只需要保留今日及今日之后的机票信息。为提升索引的效率和防止索引过大,同时尽量避免删除过程中影响线上环境稳定性,一般会选在业务低峰期的时候删除历史数据。
如以下 DSL 通过调用 _delete_by_query
方法删除 flight_v20220107
索引中日期(dt)在 20220729 ~ 20220802 之间的机票信息数据:
1 | POST /flight_v20220107/_delete_by_query?size=1000000&conflicts=proceed |
但在执行完删除命令之后,并不会马上释放该索引的存储大小。因为在 Elasticsearch 中,删除文档并不是真正的删除,而是将这些文档标记为已删除,使它们不会被搜索到而已。如果要回收磁盘空间,释放索引的存储大小,还必须优化索引,即使用 _forcemerge
命令合并段减少分片中段数量、删除冗余数据。
1 | POST /flight_v20220107/_forcemerge?only_expunge_deletes=true |
_forcemerge
命令说明:
优化所有索引:
1
POST /_forcemerge?only_expunge_deletes=true
优化单个索引(其中
index_name
为索引名称):1
POST /index_name/_forcemerge?only_expunge_deletes=true
优化多个索引(其中
index_name_1
和index_name_2
为索引名称):1
POST /index_name_1,index_name_2/_forcemerge?only_expunge_deletes=true
(END)
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.