使用按查询删除

时间:2018-09-28 23:06:51

标签: elasticsearch

ElasticSearch 6.2-我有大约216,000个文档需要从我们的ElasticSearch索引之一中删除。我需要删除的每个文档都有一个文档编号。

我只有一个这样的文档被删除过:

DELETE: http://{{elasticip}}:9200/{{index}}/_doc/101

假设我知道文档_id字段的所有216,000个值,如何一次完成删除所有216,000个文档?

我以前在ElasticSearch中使用过update_by_query,但实际上我也有一个delete_by_query函数可用,但我从未尝试过。假设我需要删除的文档是id的1,2,3,4,5,并假设调用看起来像这样:

POST http://{{elasticip}}:9200/{{index}}/_delete_by_query

身体看起来如何?

编辑1: 每个来自@nitzien的答案,我都尝试了以下两个呼叫:

POST http://{{elasticip}}:9200/{{index}}/_delete_by_query

{
    "query": {
        "ids" : {
            "type" : "_doc",
            "values" : ["1", "2", "3", "4", "5"]
        }
    }
}

AND

POST http://{{elasticip}}:9200/{{index}}/_delete_by_query

{
    "query": {
        "ids" : {
            "type" : "_id",
            "values" : ["1", "2", "3", "4", "5"]
        }
    }
}

但是,在两种情况下,我的回复都是"deleted": 0"

我已经确认这5个id确实存在于索引中,并且可以使用DELETE语句一对一地成功删除它们。

编辑2-问题已解决-我在此索引中的文档类型不是_doc,而是_ssldoc,因此必须在@nitzien提供的查询中进行更新。将nitzien的答案标记为答案。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用类似this的查询来删除ID。在执行此操作之前,请记住备份弹性搜索索引或快照。 :)