2014-07-27 5 views
0

탄성 검색을 사용하려고하는데 중첩 된 개체를 쿼리하려고했습니다.탄성 검색 중첩 된 개체 매핑 및 검색 쿼리

기본적으로 내 개체의 형식은 다음과 내가 중첩 된 필드에 사용

{ 
    "name" : "Some Name", 
    "field2": [ 
      { 
      "prop1": "val1", 
      "prop2": "val2" 
      }, 
      { 
      "prop1": "val3", 
      "prop2":: "val4" 
      } 
     ] 
} 

매핑하는 것은 다음과 같다.

PUT /someval/posts/_mapping 
{ 
    "posts": { 
     "properties": { 
      "field2": { 
       "type": "nested" 
      } 
     } 
    } 
} 

말은 지금은에 대한/필드 요소를 삽입/게시물/1/필드/게시물/2 등 내가 field2.prop1에 대한 K 값을 가지고 있고 대부분의 경기에 따라 정렬 된 게시물을 얻는다 쿼리를 원하는 내가 가지고있는 K 값 중 field2. 무엇에 대한 적절한 쿼리가 될 것입니다. 또한 간단한 필터를 사용해 보았지만 올바르게 작동하지 않는 것 같습니다.

GET /someval/posts/_search 
{ 
"query": { 
    "filtered": { 
    "query": { 
     "match_all": {} 
    } 
    }, 
    "filter" : { 
     "nested" : { 
      "path" : "field2", 
      "filter" : { 
       "bool" : { 
        "must" : [ 
         { 
          "term" : {"field2.prop1" : "val1"} 
         } 
        ] 
       } 
      }, 
      "_cache" : true 
     } 
    } 
    } 
} 

위의 쿼리는 적어도 첫 번째 게시물과 일치해야합니다. 하지만 일치하는 항목이 없습니다. 아무도 여기서 무엇이 잘못 되었는가를 명확히하는 데 도움이 될 수 있습니까?

답변

1

json 구조에 문제가있어 필터링 된 쿼리를 사용했지만 필터 (개체)가 쿼리와 다른 수준에있었습니다.

차이점을 찾으십시오.

POST /someval/posts/_search 
{ 
    "query": { 
     "filtered": { 
     "query": { 
      "match_all": {} 
     }, 
     "filter": { 
      "nested": { 
       "path": "field2", 
       "filter": { 
        "bool": { 
        "must": [ 
         { 
          "term": { 
           "field2.prop1": "val1" 
          } 
         } 
        ] 
        } 
       }, 
       "_cache": true 
      } 
     } 
     } 
    } 
} 
+0

고마워요! 쿼리에 사용할 수있는 디버거가 있습니까? 또한 객체 배열에서 대부분의 일치를 쿼리하는 방법은 무엇입니까? 질문에 게시 한 것과 비슷합니다. – sriram

+0

나는 감각을 사용하고, 나는 전혀 모른다. 다음 부분에서는 아마도 별도의 질문으로 질문 할 것이므로 다른 사용자가 도움이 될 것입니다. – progrrammer

+0

좋아. 그것도 작동 :) – sriram