ES 1.5 Delete By Query API无法正常工作

时间:2017-11-30 11:15:21

标签: elasticsearch

我在ElasticSearch上使用旧版本 - 1.5。

问题:我需要删除大量文档,例如几十万到几百万。我有关于记录的所有信息,包括它的_id s - 所以_id的数组是我想要使用的。

比例问题:之前我在循环中删除了这个,但是在高速执行大量后续操作时ES不一致。因此我决定寻找批量删除。

我正在尝试使用delete by query API

文档声明:

curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}
'

我在做什么:

curl -XDELETE 'http://localhost:9200/my_index/logs/_query' -d '{
  "query" : {
    "terms" : { "_id" : ["AVTD6fhLAn35BG25xbZz", "AVTD6fhLAn35BG25xbaC"] }
  }
}
'

回复是:

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

它不会删除任何文件。如何使其工作并实际删除这些记录?

1 个答案:

答案 0 :(得分:1)

不确定elasticsearch 1.5中的delete_by_query API。在我看来,弹性搜索无法理解您的查询,因为它正在寻找"_id": "_query"(从您发布的回复中可以明显看出)。

您可以使用此处记录的批量API: https://www.elastic.co/guide/en/elasticsearch/reference/1.5/docs-bulk.html

与文档页面中的示例一样,您可以执行以下操作:

curl -s -XPOST localhost:9200/_bulk --data-binary @requests; echo
{ "delete" : { "_index" : "test", "_type" : "type1", "_id" : "2" } }
{ "delete" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
...

您需要以任何名称创建文件("请求"此处)并添加单个删除请求,每个请求由换行符分隔。