【问题标题】:Delete 200k+ documents from ElasticSearch using Delete By Query使用 Delete By Query 从 ElasticSearch 中删除 200k+ 文档
【发布时间】:2019-03-04 22:35:11
【问题描述】:

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

我只删除过这样的单个文档:

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"]
        }
    }
}

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的答案标记为答案。谢谢。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

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

    【讨论】:

    • 请注意,您可能需要分几批执行此操作,因为您将不被允许使用包含 216K id 的 ids 查询。
    • 您可能需要自己批量处理它们。
    • 您需要使用 delete_by_query 和正文语法,如链接所示。
    • 您能添加您执行的 delete_by_query 吗? elasticsearch 的示例文档很少?
    • 我想通了。我在此索引中的文档类型不是_doc,而是_ssldoc。这就是缺少的。将您的答案标记为答案。感谢您的帮助!
    猜你喜欢
    • 2022-06-13
    • 1970-01-01
    • 2020-09-08
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    相关资源
    最近更新 更多