Elasticsearch 2.3使用PHP LIbrary通过查询删除类型中的所有文档

时间:2016-05-23 05:08:15

标签: php elasticsearch elasticsearch-plugin

我希望能够使用elasticsearch php库通过查询删除文档。我实际上想要删除我的类型中的所有文档。 我可以使用正常的curl XDELETE请求来实现这一点,但是我无法使用弹性搜索的PHP库来使用它。

是的,我已经安装了delete-by-query插件,因此原始请求有效。

我目前的代码:

$params = [
    'index' => 'sanctions_lists',
    'type' => $listName,
    'body' => [
        'query' => [
            'match_all' => []
        ]
    ]
];
return $this->delete($params);

结果

  

Client.php第1440行中的InvalidArgumentException:   id不能为空。

从我的错误消息(ID不能为空)看来,按查询删除可能是php库的限制只允许按id删除。

如果我必须在我的应用程序中执行此函数的原始HTTP请求,当php库对应用程序中的其他查询非常有用时,会有点烦人。

问题摘要

是否有一种解决方法可以使用elasticsearch php库通过查询删除,而无需触及库代码?

不言而喻,但感谢任何花时间查看和帮助我的问题的人。欢呼声。

修改

包含它有助于我使用:

elasticsearch php库版本v2.1.5

2 个答案:

答案 0 :(得分:6)

您需要使用deleteByQuery() function,如下所示:

$params = [
    'index' => 'sanctions_lists',
    'type' => $listName,
    'body' => [
        'query' => [
            'match_all' => []
        ]
    ]
];
return $this->deleteByQuery($params);

如果您想查看源代码可用here

答案 1 :(得分:4)

$params = [
    "index" => "my_index",
    "type" => "my_type",
    "body" => [
        "query" => [
            "match_all" => (object)[]
        ]
    ]
];

$client->deleteByQuery($params);

根据@Val 's回答,U可能会遇到错误,因此请注意" match_all" => (对象)[]重新输入。我发现here