批量删除elasticsearch

时间:2016-09-16 08:15:21

标签: elasticsearch

我正在使用弹性搜索2.2。

这是文件数

卷曲'xxxxxxxxx:9200 / _cat / indices?v'

yellow open   app                 5   1   28019178         5073     11.4gb         11.4gb

在“app”索引中,我们有两种类型的文档。

  1. “日志”
  2. “日志”
  3. 现在我要删除“syslog”类型下的所有文档。

    因此,我尝试使用以下命令

     curl -XDELETE "http://xxxxxx:9200/app/syslog"
    

    但是我收到了以下错误

    No handler found for uri [/app/syslog]
    

    我也安装了逐个删除插件。有什么方法可以进行批量删除操作吗?

    目前,我正在通过获取ID来删除记录。

    curl -XDELETE "http://xxxxxx:9200/app/syslog/A121312"
    

    我花了大约5分钟删除10000条记录。我有超过1000000个文档需要删除。请帮忙。

    [编辑-1]

    我运行以下查询删除syslog类型docs

    curl -XDELETE 'http://xxxxxx:9200/app/syslog/_query' -d'
    {
      "query": {
        "bool": {
          "must": [
            {
              "match_all": {}
            }
          ]
        }
      }
    }'
    

    结果低于

    {"found":false,"_index":"app","_type":"syslog","_id":"_query","_version":1,"_shards":{"total":2,"successful":1,"failed":0}}
    

    我曾经查询从索引

    获取此消息
     {
          "_index" : "app",
          "_type" : "syslog",
          "_id" : "AVckPMQnKYIebrQhF556",
          "_score" : 1.0,
          "_source" : {
            "message" : "some test message",
            "@version" : "1",
            "@timestamp" : "2016-09-13T15:49:04.562Z",
            "type" : "syslog",
            "host" : "1.2.3.4",
            "priority" : 0,
            "severity" : 0,
            "facility" : 0,
            "facility_label" : "kernel",
            "severity_label" : "Emergency"
    }
    

    [编辑2]

    按查询列表删除

    sudo /usr/share/elasticsearch/bin/plugin list
    Installed plugins in /usr/share/elasticsearch/plugins/node1:
        - delete-by-query
    

3 个答案:

答案 0 :(得分:1)

在过去几天里,elasticsearch用7700万份不需要的文档填充后,我遇到了类似的问题。在查询中设置超时时间是您的朋友。如here所述。卷曲也具有增加的参数(-m 3600)

curl --request DELETE \
  --url 'http://127.0.0.1:9200/nadhled/tree/_query?timeout=60m' \
  --header 'content-type: application/json' \
  -m 3600 \
  --data '{"query":{
            "filtered":{
              "filter":{
                "range":{
                  "timestamp":{
                    "lt":1564826247
                   },
                  "timestamp":{
                    "gt":1564527660
                  }
                }
              }
            }
          }
        }'

我知道这不是您的批量删除,但是我在研究过程中找到了此页面,因此将其发布在这里。希望它对您也有帮助。

答案 1 :(得分:0)

我建议您应该创建一个新索引并重新索引要保留的文档

但是如果你想通过查询使用delete,你应该使用它,

curl -XDELETE 'http://xxxxxx:9200/app/syslog/_query'

{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ]
    }
  }
}

然后你会留下映射。

答案 2 :(得分:0)

在最新的Elasticsearch(5.2)中,您可以使用 _delete_by_query

curl -XPOST "http://localhost:9200/index/type/_delete_by_query" -d'
{
    "query":{
        "match_all":{}
    }
}'
  

按查询删除API是新的,仍应予以考虑   实验。 API可能会以不倒退的方式发生变化   兼容

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html