php elasticsearch不再删除所有记录因为版本冲突

ujv3wf0j  于 2023-01-29  发布在  PHP
关注(0)|答案(2)|浏览(194)

我有PHP应用程序与elasticsearch 6.2.1我的请求

$delete = [
  'index' => 'myIndex',

  'type' => 'mytype',
            'conflicts' => 'proceed',
            'body' => [
                'query' => [
                    'match' => [
                        "category_name" => 'myname'
                    ]
                ],
            ]
        ];
        $response = $this->client->deleteByQuery($delete);

我得到了这样的回应

Array
(
    [took] => 1
    [timed_out] => 
    [total] => 3
    [deleted] => 0
    [batches] => 1
    [version_conflicts] => 3
    [noops] => 0
    [retries] => Array
        (
            [bulk] => 0
            [search] => 0
        )

    [throttled_millis] => 0
    [requests_per_second] => -1
    [throttled_until_millis] => 0
    [failures] => Array
        (
        )

)

在此之后,它不删除任何记录。[删除] =〉0为什么它不删除?
这意味着什么?[版本冲突] =〉3

gr8qqesn

gr8qqesn1#

来自ElasticSearch文档https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html#docs-delete-by-query
_delete_by_query
在启动时获取索引的快照,并使用内部版本控制删除找到的内容。这意味着,如果文档在获取快照和处理删除请求之间发生更改,您将遇到版本冲突。* 当版本匹配时,将删除文档 *。
前几天我也遇到过同样的问题,但是当我使用conflicts=proceed时,它在Kibana控制台上对我有效,所以它在PHP上也应该对你有效。

POST /properties/_delete_by_query/?conflicts=proceed
{
    "query" : { 
        "match_all" : {}
    }
}
avkwfej4

avkwfej42#

你可以使用冲突=继续

POST /properties/_delete_by_query/?conflicts=proceed
{
    "query" : { 
        "match_all" : {}
    }
}

注:此查询将忽略version_conflicts并继续删除可删除的文档。这意味着,它可能不会删除所有内容。

相关问题