2017-04-03 4 views
1

중첩 데이터 형식에 대한 쿼리가 있으며 쿼리에서 필터링 한 중첩 데이터 형식에 대한 통계 집계를 반환하려고합니다. 여기 코드는 다음과 같습니다 반환Elasticsearch scope 쿼리에 중첩 된 집계

GET dan-created/_search 
{ 
    "_source" : ["m_iID", "m_iYear"], 
    "query": { 
     "nested": { 
     "path": "m_PeopleList", 
     "query": { 
      "match": { 
       "m_PeopleList.name": "Daniel" 
      } 
     }, 
     "inner_hits" : {} 
     } 
    }, 
    "aggregations" : { 
    "people" : { 
     "nested" : { 
      "path" : "m_PeopleList" 
     }, 
     "aggregations" : { 
      "averageDist": { 
      "stats" : { 
       "field":"m_PeopleList.value" 
      } 
      } 
     } 
    } 
    } 
    } 

스탯은 전체 인덱스,하지만 난 그들 만 위의 쿼리에서 일치하는 항목을 반환합니다. 나는 다른 곳에서이 예제를 보았지만 탄성 검색의 최신 버전을 보지 못했고 작동하지 못하게되었습니다.

감사합니다, 다니엘

답변

0

당신은 내가 원하는대로 예,이 작품을 filter aggregation

"aggregations" : { 
    "people" : { 
     "nested" : { 
     "path" : "m_PeopleList" 
     }, 
     "aggregations" : { 
     "myFilter": { 
      "filter" : { "match": { "m_PeopleList.name": "Daniel" } }, 
      "aggregations": { 
      "averageDist": { 
       "stats" : { 
       "field":"m_PeopleList.value" 
       } 
      } 
      } 
     } 
     } 
    } 
} 
+0

사용할 수 있습니다. 나는 필터 쿼리를 두 번 지정하지 않고이를 수행 할 수있는 방법이있을 것이라고 생각했을 것입니다. 하지만 집계를 원한다면 쿼리 섹션을 제거하고 "size": 0을 추가 할 수 있습니다. 감사! – danieljames

+0

'nested' 문서가 없으면 필터를 한 번만 정의 할 수 있습니다. 그러나 집계와 쿼리가 동일한 'nested' 절을 공유하지 않으므로 두 번 (size! = 0 인 경우) 정의해야합니다. – ulric260