2017-04-03 173 views
1

我有一個嵌套數據類型的查詢,並希望返回嵌套數據類型的統計聚合(由查詢過濾)。下面是代碼:Elasticsearch範圍嵌套聚合到查詢

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" 
      } 
      } 
     } 
    } 
    } 
    } 

返回的統計數據是整個索引,但我希望他們只返回從上面的查詢匹配。我在其他地方看到過這方面的例子,但沒有看到最新版本的elasticsearch,我似乎無法讓它們工作。

感謝, 丹尼爾

回答

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

是,這個工程,我想。我原以爲會有辦法做到這一點,而不必指定過濾器查詢兩次。但我看到,如果你只是想要聚合,你可以刪除查詢部分並添加「大小」:0。謝謝! – danieljames

+0

如果沒有嵌套文檔,您只能定義一次過濾器。 但由於聚合和查詢不共享相同的'nested'子句,所以必須定義兩次(大小爲!= 0) – ulric260