三种聚合分类
一、分桶聚合
1、分桶聚合:根据属性进行分桶,把具有某些相同属性的数据放到一起,相当于mysql的group by
举例:JD商城2021年手机销售量,如果采用分桶聚合。可以按照:小米、华为、苹果、其他等品牌进行聚合
2、
1 #统计不同标签的商品数量 2 GET product/_search 3 { 4 "size": 0, 5 "aggs": { 6 "aggs_tag": { 7 "terms": { 8 "field": "tags.keyword" 这里为什么不加keyword会报错? 9 } 10 } 11 } 12 }
因为agg底层的数据结构为doc_value(正排索引)的数据结构,tags字段为text类型,默认不创建正排索引,索引对该字段不能使用聚合分析
二、指标聚合
1、指标聚合:根据一些特定的指标进行数据的聚合。如avg、max、min、sum等指标
举例:大学软件工程方向有1、2、3、4班,期末考试有高等数学、数据结构、线性代数单门。求1班高等数学的最高分是多少
2、
1 #最贵、最便宜和平均价格三个指标 2 GET product/_search 3 { 4 "size": 0, 5 "aggs": { 6 "max_price": { 7 "max": { 8 "field": "price" 9 } 10 }, 11 "min_price": { 12 "min": { 13 "field": "price" 14 } 15 }, 16 "avg_price": { 17 "avg": { 18 "field": "price" 19 } 20 } 21 } 22 }
1 #使用以下代码可以查询出全部指标 2 GET product/_search 3 { 4 "size": 0, 5 "aggs": { 6 "price_status": { 7 "stats": { 8 "field": "price" 9 } 10 } 11 } 12 }
1 #按照name去重后的数量 2 GET product/_search 3 { 4 "size": 0, 5 "aggs": { 6 "name_distinct": { 7 "cardinality": { 8 "field": "name.keyword" 这里必须加keyword,如果不加词项会被分词 9 } 10 } 11 } 12 }
三、管道聚合
1、管道聚合:对聚合结果的二次聚合
举例:统计平均价格最低的商品分类,首先要按照商品分类进行聚合,接着再统计商品分类的平均价格,最后再统计平均价格最低的商品分类
2、
1 #统计平均价格最低的商品分类 2 GET product/_search 3 { 4 "size": 0, 5 "aggs": { 6 "type_bucket": { 7 "terms": { 8 "field": "type.keyword" 9 }, 10 "aggs": { 11 "price_bucket": { 12 "avg": { 13 "field": "price" 14 } 15 } 16 } 17 }, 18 "min_bucket":{ 19 "min_bucket": { 20 "buckets_path": "type_bucket>price_bucket" 21 } 22 } 23 } 24 }
四、嵌套聚合
1 #统计不同类型商品的不同级别的数量 2 GET product/_search 3 { 4 "size": 0, 5 "aggs": { 6 "type_agg": { 7 "terms": { 8 "field": "type.keyword" 9 }, 10 "aggs": { 11 "lv_agg": { 12 "terms": { 13 "field": "lv.keyword" 14 } 15 } 16 } 17 } 18 } 19 }
1 #按照lv分桶,输出每个桶的具体价格信息 2 GET product/_search 3 { 4 "size": 0, 5 "aggs": { 6 "lv_bucket": { 7 "terms": { 8 "field": "lv.keyword" 9 }, 10 "aggs": { 11 "status_bucket": { 12 "stats": { 13 "field": "price" 14 } 15 } 16 } 17 } 18 } 19 }
1 #统计不同类型商品 不同档次的价格信息 2 GET product/_search 3 { 4 "size": 0, 5 "aggs": { 6 "type_bucket": { 7 "terms": { 8 "field": "type.keyword" 9 }, 10 "aggs": { 11 "lv_bucket": { 12 "terms": { 13 "field": "lv.keyword" 14 }, 15 "aggs": { 16 "status_price": { 17 "stats": { 18 "field": "price" 19 } 20 } 21 } 22 } 23 } 24 } 25 } 26 }
1 #统计每个商品类型中 不同档次分类商品中 平均价格最低的档次 2 GET product/_search 3 { 4 "size": 0, 5 "aggs": { 6 "type_bucket": { 7 "terms": { 8 "field": "type.keyword" 9 }, 10 "aggs": { 11 "lv_bucket": { 12 "terms": { 13 "field": "lv.keyword" 14 }, 15 "aggs": { 16 "peice_avg": { 17 "avg": { 18 "field": "price" 19 } 20 } 21 } 22 }, 23 "min_bucket": { 24 "min_bucket": { 25 "buckets_path": "lv_bucket>peice_avg" 26 } 27 } 28 } 29 } 30 } 31 }