如何在elasticsearch中按结果分组

时间:2019-09-16 14:05:25

标签: elasticsearch

有一个索引:人

"_source" : {
  "id" : 304028598,
  "name" : "aaa"   
},

想要获得这些信息: 1.每个名字的平均数 2.一个名字最多可以拥有

对于sql,我可以通过sql以下获取这些信息

select max(count), avg(count), min(count) from (
    select name, count(*) count from t group by name
);    

但是如何通过elasticsearch实现它?

1 个答案:

答案 0 :(得分:0)

此问题的答案取决于Pipeline aggregations -这些聚合对另一个聚合的输出起作用。

例如,我们有许多文档,每个文档具有不同的hostVersion,并使用以下内容查找每个主机版本的最大,最小和平均文档数:

"aggs": {
    "per_hostver": {
      "terms": {
        "field": "hostVersion"
      }
    },
    "avg_docs_per_version": {
      "avg_bucket": {
        "buckets_path": "per_hostver>_count"
      }
    },
    "max_docs_per_version": {
      "max_bucket": {
        "buckets_path": "per_hostver>_count"
      }
    },
    "min_docs_per_version": {
      "min_bucket": {
         "buckets_path": "per_hostver>_count"
      }
    }
}

语法per_hostver>_count指的是聚合_count的每个存储桶生成的per_hostver字段。 _count是指所有ES聚合生成的特殊文档计数字段的方式。