elasticsearch:删除文档后如何释放商店大小

时间:2013-12-16 10:21:24

标签: elasticsearch

在我的elasticsearch服务器上: 文件总数:300万,总规模:3.6G 然后,我删除了大约280万个文档: 文件总数:约0.13万,总规模:3.6G

我删除了文件,我该如何释放文件的大小?

4 个答案:

答案 0 :(得分:72)

删除文档只会将这些标记为已删除,因此不会搜索它们。要回收磁盘空间,必须优化索引:

curl -XPOST 'http://localhost:9200/_optimize?only_expunge_deletes=true'

文档:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-optimize.html

更新

is deprecated optimize开始使用Elasticsearch 2.1.x,forcemerge favor of。 API为the same,只有端点发生了变化。

curl -XPOST 'http://localhost:9200/_forcemerge?only_expunge_deletes=true'

答案 1 :(得分:18)

在当前的弹性搜索版本(5.4)中,

  1. 优化所有指数:

    POST /_all/_forcemerge?only_expunge_deletes=true

  2. 优化单个索引

    POST /twitter/_forcemerge?only_expunge_deletes=true,其中twitter是索引

  3. 参考:https://www.elastic.co/guide/en/elasticsearch/reference/5.4/indices-forcemerge.html#indices-forcemerge

答案 2 :(得分:1)

knutwalker的答案是正确的。但是,如果您使用的是AWS ElasticSearch,并希望释放存储空间,则将无法正常工作。

在AWS上,必须在URL中指定要合并的索引。它可以包含通配符,这在索引旋转中很常见。

curl -XPOST 'https://something.es.amazonaws.com/index-*/_forcemerge?only_expunge_deletes=true'

AWS发布a list of ElasticSearch API differences

答案 3 :(得分:0)

用您的替换索引名。它将立即释放空间

curl -XPOST 'http://localhost:9200/indexname/_forcemerge' -d 
'{"only_expunge_deletes": false, "max_num_segments": 1 }'