2014-06-09 2 views
1

Elasticsearch의 필터에 대한 이해에 문제가 있습니다. 중첩 된 배열이있는 인덱스를 검색하는 필터를 작성하려고합니다.배열에서 검색 할 때 Elasticsearch의 "bool"필터링

{ 
    "query": { 
     "filtered": { 
     "filter": { 
      "bool": { 
       "must": [ 
        { 
         "term": { 
          "bParams.bParamList.year": [ 2007 ] 
         } 
        }, 
        { 
         "range": { 
          "bParams.bParamList.value": { 
           "from": 1, 
           "to": 453 
          } 
         } 
        }, 
        { 
         "term": { 
          "bParams.bParamList.bParamId": [ 304 ] 
         } 
        } 
       ] 
       } 
      } 
     } 
    } 
} 

내가 쿼리 결과를 반환하지 않을 것으로 예상하지만, 결과가 반환됩니다

 "bParams": { 
       "bParamList": [ 
        { 
         "bParamId": 298, 
         "year": 2008, 
         "quarter": 4, 
         "value": 239698 
        }, 
        { 
         "bParamId": 298, 
         "year": 2009, 
         "quarter": 4, 
         "value": 453 
        }, 
        { 
         "bParamId": 298, 
         "year": 2007, 
         "quarter": 4, 
         "value": 190000 
        }, 
        { 
         "bParamId": 304, 
         "year": 2009, 
         "quarter": 4, 
         "value": 7000 
        } 
       ] 
      } 

요청입니다. 적절한 가치가있는 요소가 있음을 이해합니다. 나는 모든 요청 매개 변수를 동시에 고려해야한다.

+0

: 색인 무슨 nested없이

이 본질적으로 동일하다? 중첩 된 쿼리가 필요합니다. 이 [질문/답변] (http://stackoverflow.com/questions/17536820/how-to-avoid-cross-object-search-behavior-with-nested-types-in-elastic-search/17543151)을보십시오. # 17543151). – Thorsten

+0

답변 주셔서 감사합니다. 나는 이런 식으로 취급했다. 매핑을 요청하지 않고도 제대로 실행할 수있는 또 다른 방법이 있습니까? 인덱스를 만들었습니다. 다시 인덱싱하지 않고 기존 매핑을 수정할 수 있습니까? – helvar

+0

@Alex의 답변에 따라 매핑을 재설정하고 모든 문서의 색인을 다시 만들어야합니다 (불행히도). – Thorsten

답변

0

nested- 매핑을 사용해야하며이를 추가하려면 다시 색인해야합니다. 당신은`nested` 매핑을 설정 한

{ 
    "bParams": { 
     "bParamList": { 
      "bParamId": [298, 298, ...], 
      "year": [2008, 2009, ...], 
      "quarter": [4, 4, ...], 
      "value", [239698, 453, ...], 
    } 
    } 
} 
+0

답변 해 주셔서 감사합니다! 포함 된 매핑의 단일 필드에서 중첩 된 필드를 검색하려면 중첩 매핑이 쿼리 결과를 변경합니까? – helvar