2016-06-07 3 views
1

중첩 데이터가 포함 된 elasticsearch 쿼리에서 데이터를 가져와야합니다. 데이터 원본이 true로 설정됩니다. '필드'추가결과에 중첩 데이터가 포함 된 탄성 검색 쿼리를 만들려면 어떻게해야합니까?

"fields":["*"], 
"query": { 
... 

은 모든 데이터를 루트 수준에서 반환합니다.

그러나 중첩 된 문서 (실제로 중첩 된 중첩 된 문서)에있는 데이터를 가져와야합니다. 는 중첩 된 객체 심판

"fields":["products.envs.title"], 

하지만 지금까지 기쁨을 가지고 _source 및 필드 주위에 플레이. 누구든지이 데이터를 쿼리의 일부로 가져 오는 방법을 알고 있습니다. 쿼리에 집계가 포함되어 있으며 잘 반환되지만 중첩 된 데이터를 결과의 일부로 가져와 플래그를 확인하고 데이터를 반환하여 플래그에 종속적으로 호출 할 수 있어야합니다.

POST /so/so/1 
{ 
    "id": 1, 
    "user": { 
     "name": "adam", 
     "role": { 
     "code": "admin" 
     } 
    } 
} 

은 이제 fields 매개 변수를 사용하여 데이터 및 절단 반환 결과를 조회 해보자 : 당신이 아래에 볼 수

+0

당신이 예를 들어 문서와 당신이 같은 반응보고 기대를 게시 할 수 있습니까? 'fields'를 지정하지 않으면 응답에서'_source' 전체를 반환합니다. 응답에는 중첩 된 (중첩 된) 중첩 된 문서가 포함됩니다. – pickypg

답변

1

당신은 당신의 매핑과 객체 구조를 지정하지 않은 그래서 나는 내 자신을 만들었습니다.
검색어 :

POST /so/so/_search 
{ 
    "fields": [ 
     "id", 
     "user.role.code" 
    ], 
    "query": { 
     "match_all": {} 
    } 
} 

결과 :

"hits": { 
     "total": 1, 
     "max_score": 1, 
     "hits": [ 
     { 
      "_index": "so", 
      "_type": "so", 
      "_id": "1", 
      "_score": 1, 
      "fields": { 
       "user.role.code": [ 
        "admin" 
       ], 
       "id": [ 
        1 
       ] 
      } 
     } 
     ] 
    } 

당신이 모든 것이 제대로 작동 볼 수 있듯이. 문제는 "user"또는 "user.role"과 같은 전체 객체를 반환하기를 원한다면 "field [X] is leaf field"예외가 발생합니다. 유일한 해결책은 fields 매개 변수 사용을 중지하고 _source 매개 변수를 사용하여 데이터를 자르는 것입니다.이 문제는 여기에서 설명합니다. https://github.com/elastic/elasticsearch/issues/4888. 또한 fields 매개 변수는 권장되지 않으며 아래 그림과 같이 항상 _source 매개 변수를 사용해야합니다.
검색어 :

POST /so/so/_search 
{ 
    "_source": [ 
     "id", 
     "user.role.code" 
    ], 
    "query": { 
     "match_all": {} 
    } 
} 

응답 :

"hits": { 
     "total": 1, 
     "max_score": 1, 
     "hits": [ 
     { 
      "_index": "so", 
      "_type": "so", 
      "_id": "1", 
      "_score": 1, 
      "_source": { 
       "id": 1, 
       "user": { 
        "role": { 
        "code": "admin" 
        } 
       } 
      } 
     } 
     ] 
    } 
관련 문제