2012-09-13 3 views
6

ElasticSearch 색인에서 데이터를 삭제하는 데 사용하려고하는 다음 쿼리가 있습니다.ElasticSearch 검색어 삭제 - 용어 및 범위가 포함 된 필터

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

이 쿼리를 기반으로 문서를 삭제하려고했습니다. 이 쿼리는 인덱스에 대해 실행할 때 결과를 올바르게 반환합니다. 그러나 색인에 대해 delete 명령을 실행하려고하면 아무 일도 일어나지 않습니다.

내가 잘못한 쿼리를 작성하는지 잘 모르겠습니다.

답변

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

필터링 된 내용에는 실제로'query' 구성 요소가 필요하지 않습니다. http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html#_filtering_without_a_query – tmandry

+0

좋은 지적 @tmandry – javanna

관련 문제