elasticsearch elasticsearch:如何在删除文档后释放存储大小,elasticsearch,elasticsearch" /> elasticsearch elasticsearch:如何在删除文档后释放存储大小,elasticsearch,elasticsearch" />

elasticsearch elasticsearch:如何在删除文档后释放存储大小

elasticsearch elasticsearch:如何在删除文档后释放存储大小,elasticsearch,elasticsearch,在我的elasticsearch服务器上: 文件总数:300万份,总尺寸:3.6G 然后,我删除了大约280万个文档: 文件总数:约13万份,总尺寸:3.6G 我已经删除了文档,如何释放文档的大小?删除文档只会将这些文档标记为已删除,因此不会对其进行搜索。要回收磁盘空间,必须优化索引: curl -XPOST 'http://localhost:9200/_optimize?only_expunge_deletes=true' 文件: 文档已移至: 更新 从Elasticsearch 2.1

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


我已经删除了文档,如何释放文档的大小?

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

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

文档已移至:

更新 从Elasticsearch 2.1.x开始,在
forcemerge
中进行
优化
。 API是,只有端点发生了更改

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

在当前elasticsearch版本(7.5)中

  • 要优化所有指标:

    POST/\u forcemerge?only\u expunge\u deletes=true

  • 优化单指标

    POST/twitter/\u forcemerge?仅\u expunge\u deletes=true
    ,其中twitter是索引

  • 优化几个指标

    POST/twitter,facebook/\u forcemerge?仅删除=true
    ,其中twitter和facebook是索引


  • 参考资料:

    knutwalker的答案是正确的。但是,如果您正在使用AWS ElasticSearch并希望释放存储空间,这将不太有效

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

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

    AWS发布。

    将indexname替换为您的。它将立即释放空间

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

    克努特的回答是正确的。这里有一篇文章更详细地介绍了为什么会这样:你们都很有帮助。非常感谢!我同意,这是一个很好的答案,但是你需要多少空间才能删除删除的文件?我正在运行上述命令,目前(仍在运行)索引增加了10Gig。索引被分成几个部分。优化将合并这些段,同时在过程中删除已删除的文档。索引数据在合并过程中被复制,这就是增加的原因。最坏情况下的合并需要在合并期间使用当前索引大小的2倍,而且这样大的合并很可能需要数小时。如果您否决了答案,请始终添加一条注释,说明为什么解决方案是错误的。