2012-09-13 75 views
6

我有以下查詢,我試圖用來刪除ElasticSearch索引中的數據。ElasticSearch刪除查詢 - 過濾條件和範圍

{ 
    "filter": { 
     "and": [ 
      { 
       "range": { 
        "Time": { 
         "from": "20120101T000000", 
         "to": "20120331T000000" 
        } 
       } 
      }, 
      { 
       "term": { 
        "Source": 1 
       } 
      } 
     ] 
    } 
} 

我試圖刪除基於此查詢的文檔。這個查詢返回的結果罰款,當我運行它對索引。但是,當我嘗試對索引運行刪除命令時,沒有任何反應。

我不確定是否構建查詢錯誤或其他。

回答

10

您只使用過濾器,而delete by query API可能需要查詢。您可以使用filtered query你這樣的過濾器轉換爲查詢:

{ 
    "filtered" : { 
     "query" : { 
      "match_all" : {} 
     }, 
     "filter": { 
      "and": [ 
       { 
        "range": { 
         "Time": { 
          "from": "20120101T000000", 
          "to": "20120331T000000" 
         } 
        } 
       }, 
       { 
        "term": { 
         "Source": 1 
        } 
       } 
      ] 
     } 
    } 
} 

否則,你可以使用bool query有兩個必備條款,這樣就不需要過濾查詢了您的過濾器轉換爲查詢。無論如何,我想過濾器的方法更好,因爲過濾器更快。

+1

請注意,您實際上並不需要過濾內部的查詢組件:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html#_filtering_without_a_query – tmandry

+0

好點@tmandry – javanna