elasticsearch: how to free store size after deleting documents

前端 未结 4 729
旧时难觅i
旧时难觅i 2020-12-07 16:24

On my elasticsearch server: total documents: 3 million, total size: 3.6G Then, I delete about 2.8 millions documents: total documents: about 0.13 million, total size: 3.6G

相关标签:
4条回答
  • 2020-12-07 16:57

    Deleting documents only flags these as deleted, so they would not be searched. To reclaim disk space, you have to optimize the index:

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

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

    The documentation has moved to: https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html

    Update

    Starting with Elasticsearch 2.1.x, optimize is deprecated in favor of forcemerge. The API is the same, only the endpoint did change.

    curl -XPOST 'http://localhost:9200/_forcemerge?only_expunge_deletes=true'
    
    0 讨论(0)
  • 2020-12-07 16:57

    knutwalker's answer is correct. However if you are using AWS ElasticSearch and want to free storage space, this will not quite work.

    On AWS the index to forgemerge must be specified in the URL. It can include wildcards as is common with index rotation.

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

    AWS publishes a list of ElasticSearch API differences.

    0 讨论(0)
  • 2020-12-07 17:00

    In the current elasticsearch version(7.5),

    1. To optimize all indices:

      POST /_forcemerge?only_expunge_deletes=true

    2. To optimize single index

      POST /twitter/_forcemerge?only_expunge_deletes=true , where twitter is the index

    3. To optimize several indices

      POST /twitter,facebook/_forcemerge?only_expunge_deletes=true , where twitter and facebook are the indices

    Reference: https://www.elastic.co/guide/en/elasticsearch/reference/7.5/indices-forcemerge.html#indices-forcemerge

    0 讨论(0)
  • 2020-12-07 17:00

    Replace indexname with yours. It will immediately free up space

    curl -XPOST 'http://localhost:9200/indexname/_forcemerge' -d 
    '{"only_expunge_deletes": false, "max_num_segments": 1 }'
    
    
    0 讨论(0)
提交回复
热议问题