三种聚合分类

一、分桶聚合

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 }

 

posted @ 2022-02-11 16:04  showMeTheCodes  阅读(537)  评论(0编辑  收藏  举报