目录
一、数据聚合
聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:
-
什么品牌的手机最受欢迎?
-
这些手机的平均价格、最高价格、最低价格?
-
这些手机每月的销售情况如何?
ES实现这些统计功能比数据库的sql要方便的多,而且查询速度非常快,可以实现近实时搜索效果。
聚合常见的有三类:
-
桶(
Bucket)聚合:用来对文档做分组-
TermAggregation:按照文档字段值分组,例如按照品牌值分组、按照国家分组 -
Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组
-
-
度量(
Metric)聚合:用来计算一些值,比如:最大值、最小值、平均值等-
Avg:求平均值 -
Max:求最大值 -
Min:求最小值 -
Stats:同时求max、min、avg、sum等
-
-
管道(
pipeline)聚合:将其它聚合的结果为基础做进一步做深层次的运算(聚合)
注意:参加聚合的字段必须是keyword、日期、数值、布尔类型
1.1 DSL实现聚合
与之前的搜索功能类似,我们依然先学习DSL的语法,再学习JavaAPI.
1.1.1 Bucket聚合
例如我们要统计所有商品中共有哪些商品分类,其实就是以分类(category)字段对数据分组。category值一样的放在同一组,属于Bucket聚合中的Term聚合。
基本语法如下:
# 聚合
GET /goods/_search
{
"query": {"match_all": {}}, // 当没有条件(查询所有)的时候可以省略
"aggs": { // 定义聚合
"cate_agg": { // 给聚合起个名字,随意
"terms": { // 聚合类型,terms:词条类型的
"field": "category", // 参与聚合的字段
"size": 20 // 希望获取聚合结果的数量,默认20
}
}
},
"size":0 //在查询过程中不仅仅会把聚合结果返回给我们,同时还会把搜索结果的数据返回给我们,设置size为0,就是不需要返回文档信息。如果不设置size默认为10
}
语法说明:
-
size:在查询过程中不仅仅会把聚合结果返回给我们,同时还会把搜索结果的数据返回给我们,设置size为0,就是不需要返回文档信息。如果不设置size默认为10 -
aggs:定义聚合-
cate_agg:聚合名称,自定义,但不能重复-
terms:聚合的类型,按分类聚合,所以用term-
field:参与聚合的字段名称 -
size:希望返回的聚合结果的最大数量
-
-
-
查询的结果:

这个就有点类始于Sql语句:select category,count(*) from goods group by category
一次可以获取多个聚合:

&spm=1001.2101.3001.5002&articleId=141998702&d=1&t=3&u=d469256ebd9d4b91b426d00ecd291746)
2万+

被折叠的 条评论
为什么被折叠?



