elasticsearch通过查询删除不会释放磁盘空间

时间:2019-09-01 11:08:21

标签: elasticsearch

我使用以下命令删除ElasticSearch(elasticsearch-7.2.0)文档:

curl -H'Content-Type:application/json' -d'{
    "query": {
        "range": {
            "@timestamp": {
                "lt": "now-40d",
                "format": "epoch_millis"
            }
        }
    }
}
' -XPOST "http://127.0.0.1:9200/*-*/_delete_by_query?pretty"

这是结果:

{
  "took" : 55500,
  "timed_out" : false,
  "total" : 16710000,
  "deleted" : 16710000,
  "batches" : 20000,
  "version_conflicts" : 0,
  "noops" : 0,
  "retries" : {
    "bulk" : 0,
    "search" : 0
  },
  "throttled_millis" : 0,
  "requests_per_second" : -1.0,
  "throttled_until_millis" : 0,
  "failures" : [ ]
}

但是当我检查磁盘使用情况时:

du -sh /data/docker/efk/elasticsearch-7.2.0/data/nodes/0

磁盘空间未释放。如何释放磁盘空间?

1 个答案:

答案 0 :(得分:2)

elastic只是将文档标记为已删除,并在合并过程发生时将其释放。

您可以使用forecemerge API释放磁盘。 https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html

,但是您应该考虑使用此命令时,将自动为该索引禁用自动合并和自动释放磁盘。

有一些示例命令可以解决您的问题:

curl  -H'Content-Type:application/json' -XPOST 127.0.0.1:9200/AN-INDEX-NAME/_forcemerge?max_num_segments=1

合并过程是资源杀手,您应该一次对索引执行一次。