2012-09-13 31 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