2017-04-03 143 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