这篇文档就简单记录哈ES中的聚合分析,包括指、、。其实就是数据库中的各类分析函数,比如、、、y、g等等。主要应用在一些统计分析业务中。
查询建筑最高的楼层:
如果某个文档中缺少 floor1字段,则设置该字段的值为 6。
也可以通过脚本来查询最大值:
使用脚本时,可以先通过 去判断文档是否有对应的属性。
统计最小值,用法和 Max Aggregation 基本一致:
脚本:
统计平均值:
求和:
cardinality aggregation 用于基数统计。类似于 SQL 中的 distinct count(0)。
text 类型是分析型类型,默认是不允许进行聚合操作的,如果相对 text 类型进行聚合操作,需要设置其 fielddata 属性为 true,这种方式虽然可以使 text 类型进行聚合操作,但是无法满足精准聚合,如果需要精准聚合,可以设置字段的子域为 keyword。
- 1、方式一:
定义 books 索引:
重新插入数据,然后查询出版社的总数量:
- 2、方式二
基本统计,一次性返回 count、max、min、avg、sum:
高级统计,比 stats 多出来:平方和、方差、标准差、平均值加减两个标准差的区间:
百分位统计:
可以按照字段统计文档数量(包含指定字段的文档数量):
Terms Aggregation 用于分组聚合,例如,统计各个出版社出版的图书总数量:
统计不同出版社所出版的图书的平均价格:
过滤器聚合。可以将符合过滤器中条件的文档分到一个桶中,然后可以求其平均值。
例如查询书名中包含 java 的图书的平均价格:
多过滤器聚合。过滤条件可以有多个。
例如查询书名中包含 java 或者 office 的图书的平均价格:
按照范围聚合,在某一个范围内的文档数统计。
例如统计图书价格在 0-50、50-100、100-150、150以上的图书数量:
Range Aggregation 也可以用来统计日期,但是也可以使用 Date Range Aggregation,后者的优势在于可以使用日期表达式。
构造数据:
统计一年前到一年后的博客数量:
:
1、12M/M 表示 12 个月。
2、1y/y 表示 1年。
3、d 表示天。
时间直方图聚合。
例如统计各个月份的博客数量:
空值聚合。
统计所有没有 price 字段的文档:
可以根据父子文档关系进行分桶。
查询子类型为 student 的文档数量:
对地理位置数据做统计。
例如查询(34.288991865037524,108.9404296875)坐标方圆 600KM 和 超过 600KM 的城市数量:
IP 地址范围查询:
管道聚合相当于在之前聚合的基础上,再次聚合。
计算聚合平均值。
例如,统计每个出版社所出版图书的平均值,然后再统计所有出版社的平均值:
统计每个出版社所出版图书的平均值,然后再统计平均值中的最大值:
统计每个出版社所出版图书的平均值,然后再统计平均值中的最小值:
统计每个出版社所出版图书的平均值,然后再统计平均值之和:
统计每个出版社所出版图书的平均值,然后再统计平均值的各种数据: