聚合返回所有值不进行分组依据

时间:2017-03-03 22:25:00

标签: elasticsearch

可以聚合返回所有值吗?有没有办法用脚本做到这一点?

{
"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,我想要的只是返回字段值

1 个答案:

答案 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,返回计数文档。