2013-07-16 205 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插件,你可以使用。