《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.21.Aggregations(9) https://developer.aliyun.com/article/1229232
4、直方图聚合 histogram 和日期直方图聚合 date_histogram
1)基础用法
直方图聚合通常用来查看文档的分布情况,比如对产品价格进行间隔为1000进行分组聚合:
GET order/_search { "aggs": { "histogram_test": { "histogram": { //聚合类型 "field": "price", "interval": 1000 //分组间隔 } } } } 结果: "aggregations" : { "histogram_test" : { "buckets" : [ { "key" : 7000.0, "doc_count" : 2 }, { "key" : 8000.0, "doc_count" : 2 }, { "key" : 9000.0, "doc_count" : 2 } ] } } }
通过结果可以看到价格为7000、8000、9000的文档数量都是2个。如果聚合结果很多,而我们又更关心数量多的文档情况,那么此时可以通过设置 min_doc_count(最小文档计数)参数来限制文档数小于多少的不展示。
一般来说,文档的分桶结果会基于数据本身。例如你的目的是要0-500的价格分桶,而数据只有100以上的,那么返回结果不存在100以下的桶。此时如果有此类需求,可以通过extended_bounds设置桶的最大值和最小值,强制返回聚合数量为0的结果。可以通过这种order更改计算结果的排序规则,_count 代表按照 doc_count 的值进行排序,默认为 desc; _key 代表按照 key 的字母顺序进行排序。
Date histogram 日期直方图的用法与 histogram 基本一致,只不过 interval 间隔上支持了日期的表达式。支持的表达式为: `year`, `quarter`, `month`, `week`, `day`, `hour`, `minute`, `second`。也可以使用固定间隔,支持表达式为:milliseconds (ms)、seconds (s)、minutes (m)、hours (h)、days (d)。返回结果支持使用 "format":"yyyy-MM-dd" 进行格式化。
5、范围聚合 range、时间范围聚合 date_range、ip范围聚合ip_range
1)基础用法
范围聚合通常用来统计用户自定义范围内的文档数量。通过 from 和 to 定义范围边界,结果包含 from 值但排除 to 值。
例如对产品价格7000-8000做聚合,可以看到结果命中了2个文档。
GET order/_search { "aggs": { "range_test": { "range": { "field": "price", "ranges": [ 870 > 三、产品能力 { "from": 7000, "to": 8000 } ] } } } } 聚合结果: "aggregations" : { "range_test" : { "buckets" : [ { "key" : "7000.0-8000.0", "from" : 7000.0, "to" : 8000.0, "doc_count" : 2 } ] } }
Elasticsearch 为了满足各类用户的需求,也提供了时间范围聚合 date_range、ip 范围聚合
ip_range 分别支持对日期和 ipv4 类型字段的聚合统计。
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.21.Aggregations(11) https://developer.aliyun.com/article/1229229