13

我正在尝试从 Elasticsearch 中删除特定的日期记录。我的查询如下:

curl -XDELETE 'http://localhost:9200/twitter/twit/_query' -d '
{
    "filter" : {
            "range" : {
                "date_time" : { "from" : "2012-10-01 00:00:01", "to" : "2013-05-01 11:59:59"}
            }
        }
}'

但它不会删除任何记录。所以这是正确的一种或有其他方法可以删除记录。

4

2 回答 2

14

在 1.0 之前,按查询删除不使用过滤器。语法直接指向搜索 API 中的“查询”块。您需要改用范围查询

curl -XDELETE 'http://localhost:9200/twitter/twit/_query' -d '
{
    "range" : {
        "date_time" : { "from" : "2012-10-01 00:00:01", "to" : "2013-05-01 11:59:59"}
    }
}'
于 2013-07-16T12:42:14.100 回答
7

自 2.0 以来,按查询删除已被弃用。使用滚动/扫描查找要删除的所有文档 ID,并按 ID 调用 delete

在 1.5.3 中已弃用。

“通过查询删除将在 2.0 中删除:这是有问题的,因为它会静默强制刷新,这会在并发索引期间迅速导致 OutOfMemoryError,并且还可能导致主副本和副本变得不一致。相反,使用滚动/扫描 API 查找所有匹配 id,然后发出批量请求以删除它们..

https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-delete-by-query.html

您还可以使用一个按查询删除的插件。

于 2015-11-22T13:33:43.927 回答