【发布时间】:2022-01-25 04:35:55
【问题描述】:
在我的弹性搜索服务器上: 文件总数:300万,总大小:3.6G 然后,我删除了大约 280 万份文档: 文件总数:约13万,总大小:3.6G
我已经删除了文档,我应该如何释放文档的大小?
【问题讨论】:
标签: elasticsearch
在我的弹性搜索服务器上: 文件总数:300万,总大小:3.6G 然后,我删除了大约 280 万份文档: 文件总数:约13万,总大小:3.6G
我已经删除了文档,我应该如何释放文档的大小?
【问题讨论】:
标签: elasticsearch
删除文档只会将它们标记为已删除,因此它们不会被搜索。要回收磁盘空间,您必须优化索引:
curl -XPOST 'http://localhost:9200/_optimize?only_expunge_deletes=true'
文档:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-optimize.html
文档已移至: https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html
从 Elasticsearch 2.1.x 开始,optimize is deprecated in favor of forcemerge。
API 是 the same,只有端点发生了变化。
curl -XPOST 'http://localhost:9200/_forcemerge?only_expunge_deletes=true'
【讨论】:
在当前的elasticsearch版本(7.5)中,
优化所有索引:
POST /_forcemerge?only_expunge_deletes=true
优化单个索引
POST /twitter/_forcemerge?only_expunge_deletes=true,其中 twitter 是索引
优化多个指标
POST /twitter,facebook/_forcemerge?only_expunge_deletes=true ,其中 twitter 和 facebook 是索引
【讨论】:
knutwalker 的回答是正确的。但是,如果您使用 AWS ElasticSearch 并想释放存储空间,这将不太奏效。
在 AWS 上,必须在 URL 中指定要合并的索引。它可以包含通配符,这在索引轮换中很常见。
curl -XPOST 'https://something.es.amazonaws.com/index-*/_forcemerge?only_expunge_deletes=true'
【讨论】:
我只想指出,Force Merge API 的 7.15 文档包含此警告:
仅在完成写入索引后才应针对索引调用强制合并。强制合并可能会导致生成非常大 (>5GB) 的段,如果您继续写入此类一个索引,那么自动合并策略将永远不会考虑这些段以进行未来的合并,直到它们主要由已删除的文档组成。这可能会导致非常大的段保留在索引中,从而导致磁盘使用量增加和搜索性能变差。
所以你应该在开始之前关闭对索引的写入。
【讨论】:
将 indexname 替换为您的。它会立即释放空间
curl -XPOST 'http://localhost:9200/indexname/_forcemerge' -d
'{"only_expunge_deletes": false, "max_num_segments": 1 }'
【讨论】: