无法使用 _delete_by_query 删除 Elasticsearch 中的项目

Posted

技术标签:

【中文标题】无法使用 _delete_by_query 删除 Elasticsearch 中的项目【英文标题】:Can't delete item in Elasticsearch with _delete_by_query 【发布时间】:2019-03-20 06:25:36 【问题描述】:

我想根据简单的条件删除 Elasticsearch 数据库中的一些项目。我尝试通过 Postman 应用程序来实现。所以我有一个 POST 请求到这个 url localhost:9200/newlocalsearch/_delete_by_query 这个 json 查询:


    "query": 
        "bool": 
            "must_not": [
                "exists": "field": "ico"
            ]
        
    

但是当我向数据库发送请求时,它会返回这个错误响应:


    "took": 51,
    "timed_out": false,
    "total": 1,
    "deleted": 0,
    "batches": 1,
    "version_conflicts": 1,
    "noops": 0,
    "retries": 
        "bulk": 0,
        "search": 0
    ,
    "throttled_millis": 0,
    "requests_per_second": -1,
    "throttled_until_millis": 0,
    "failures": [
        
            "index": "newlocalsearch",
            "type": "doc",
            "id": "0",
            "cause": 
                "type": "version_conflict_engine_exception",
                "reason": "[doc][0]: version conflict, current version [-1] is different than the one provided [1]",
                "index_uuid": "jZbdUfqwSAqtFELXB2Z2AQ",
                "shard": "0",
                "index": "newlocalsearch"
            ,
            "status": 409
        
    ]

我不明白会发生什么。有没有人在那里:) 谁知道这意味着什么?非常感谢。

【问题讨论】:

尝试添加为获取参数'conflicts=proceed&refresh=wait_for' 这是什么意思。为什么我的 POST 请求无法执行?我需要了解发生了什么。 elastic.co/guide/en/elasticsearch/guide/current/…, discuss.elastic.co/t/… ?conflicts=proceed&refresh&slices=5 使用切片运行它 【参考方案1】:

您可能需要先刷新索引:

localhost:9200/newlocalsearch/_refresh发送POST请求

【讨论】:

以上是关于无法使用 _delete_by_query 删除 Elasticsearch 中的项目的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch实战(二十二)-查询并删除匹配文档(delete_by_query)

ElasticSearch实战(二十二)-查询并删除匹配文档(delete_by_query)

es xxx_by_query

elasticsearch常用命令之_refresh_delete_by_querymappings创建索引结构exists_sourcebool查询(mustshould)大于小于符号

ElasticSearch 删除所有数据

Elasticsearch按查询删除未完成删除