2013-07-16 157 views
12

我想从Elasticsearch中删除特定的日期记录。我的查询如下:通过查询从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"} 
      } 
     } 
}' 

但它没有删除任何记录。所以它是正确的或有其他一些方法来删除记录。

回答

13

在1.0之前,通过查询删除不使用过滤器。语法直接转到搜索API中的“查询”块。您需要改为使用range query

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"} 
    } 
}' 
+0

或者您可以使用filtered_query并为其添加过滤器。不同之处在于过滤器被缓存并且性能更高。 – javanna

+1

我相信当你查询删除时,你想避免使用缓存的结果。 –

+0

为什么?我想这取决于您执行的查询的域和类型。这不是关于在这种情况下得到不同的结果,而是关于更快的结果。但是在某些情况下,您确实想要避免缓存只执行一次的大量过滤器(您可以通过弹性搜索的方式来完成)。 – javanna

7

通过查询删除已被弃用2.0以来。使用滚动/扫描查找要删除的所有文档ID并呼叫通过ID删除

在1.5.3中不推荐使用。

“按查询删除将在2.0中删除:这是有问题的,因为它 默默强制进行刷新,可以并行索引期间迅速导致的OutOfMemoryError ,也可引起原发性和复制到 变得不一致而是使用。滚动/扫描API找到所有 匹配的ID,然后发出删除一个批量请求..

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

也有一个delete-by-query插件,你可以使用。