2017-10-18 4 views
0

Elasticsearch 쿼리 (ES 5.6.2)에서 nested document 내의 필드를 필터링하려고합니다. 중첩 된 문서 자체는 주 문서의 내부 개체 안에있는 필드입니다.내부 오브젝트 내에서 Elasticsearch 중첩 문서를 어떻게 쿼리합니까?

{ 
    "mappings": { 
     "container": { 
      "properties": { 
       "host": { 
        "properties": { 
         "tags_nested": { 
          "type": "nested", 
          "properties": { 
           "tag_key": { 
            "type": "keyword" 
           }, 
           "tag_val": { 
            "type": "keyword" 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

내가 host.tags_nested.tag_keys에 필터링 할,하지만 난 host 내부 객체 내에 중첩 된 tags_nested 문서에 액세스 할 수있는 권한 구문을 알아낼 수 없습니다 : 매핑은 다음과 같습니다. 내가 일치해야합니다 일부가 알고 내가 어떤 결과를 반환하지 않습니다 다음 쿼리를 시도 :

{ 
    "query": { 
     "nested": { 
      "path": "host.tags_nested", 
      "query": { 
       "bool": { 
        "filter": [ 
         { 
          "term": { 
           "host.tags_nested.tag_key": "example_key" 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 

ES docs에 따라, 당신은에 의해, 중첩 된 문서 내에서 쿼리에 nested 쿼리를 수행 할 수 있습니다 중첩 된 문서의 필드 이름에 해당하는 path을 전달합니다. 그러나 이것은 path이 내부 객체 내에 있고 점 표기법을 사용하여 액세스해야 할 때 작동하지 않는 것처럼 보입니다.

아이디어가 있으십니까?

답변

0

시도해보십시오. Term Query은 우리가 지정하는 정확한 단어를 검색합니다. 따라서 키워드는 정확한 텍스트를 색인으로 저장할 때 fieldname.keyword을 사용합니다.

{ 
    "query": { 
     "nested": { 
      "path": "host.tags_nested", 
      "query": { 
       "bool": { 
        "filter": [ 
         { 
          "term": { 
           "host.tags_nested.tag_key.keyword": "example_key" 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
}