可以聚合返回所有值吗?有没有办法用脚本做到这一点?
{
"size": 0,
"_source":["docDescription","datasource"],
"query": {
"match_all":{}
},
"aggs":{
"projectNameMatchCount": {
"filter" : { "match": { "docDescription": ".ppt" } },
"aggs":{
"names":{
"terms":{"field":"_id"}
}
}
},
"datasourceSourceMatchCount": {
"filter" : { "match": { "datasource": "NGA" } }
}
}
}
在aggeration projectMatchCount中,我正在应用过滤器,并调用其他aggegration,返回值,但是term会做一个group by,我不想要group by,我想要的只是返回字段值
答案 0 :(得分:1)
聚合用于将数据集分组在一起以驱动某个指标。如果要返回单个元素,则应该运行直接查询/过滤器。聚合是在您的查询缩小的数据集上运行的后期流程,并且比查询/过滤器相对昂贵。因此,在您需要汇总指标之前,应该避免它们。
话虽如此,根据我的查询理解,您使用的是两个聚合。您希望一个人返回一些文档ID,另一个只返回基于不同过滤器的计数。可以通过在projectNameMatchCount中的过滤器聚合中使用top-hits聚合来实现。有关详细信息:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html
但是,我相信通过简单地根据总查询时间和ElasticSearch端消耗的资源进行两个单独的查询,您将获益更多,一个查询返回ID,另一个查询返回ID,返回计数文档。