36.分组聚合操作—bucket进行多层嵌套

主要知识点:

  • 分组聚合操作—嵌套bucket

   

   

本讲以前面电商实例,从颜色到品牌进行下钻分析,每种颜色的平均价格,以及找到每种颜色每个品牌的平均价格。

比如说,现在红色的电视有4台,同时这4台电视中,有3台是属于长虹的,1台是属于小米的,那么:

  • 红色电视中的3台长虹的平均价格是多少?
  • 红色电视中的1台小米的平均价格是多少?

下钻的意思是,已经分了一个组了,比如说颜色的分组,然后还要继续对这个分组内的数据,再分组,比如一个颜色内,还可以分成多个不同的品牌的组,最后对每个最小粒度的分组执行聚合分析操作,这就叫做下钻分析,表示在es语法上就是bucket进行多层嵌套。

   

语法:

   

GET /tvs/sales/_search

{

"size": 0,

"aggs": {

"group_by_color": {

"terms": {

"field": "color"

},

"aggs": {

"color_avg_price": {

"avg": {

"field": "price"

}

},

"group_by_brand": {

"terms": {

"field": "brand"

},

"aggs": {

"brand_avg_price": {

"avg": {

"field": "price"

}

}

}

}

}

}

}

}

执行结果(部分):

   

"aggregations": {

"group_by_color": {

"doc_count_error_upper_bound": 0,

"sum_other_doc_count": 0,

"buckets": [

{

"key": "红色",

"doc_count": 4,

"color_to_price": {

"value": 3250

},

"group_by_brand": {

"doc_count_error_upper_bound": 0,

"sum_other_doc_count": 0,

"buckets": [

{

"key": "长虹",

"doc_count": 3,

"brand_avg_price": {

"doc_count_error_upper_bound": 0,

"sum_other_doc_count": 0,

"buckets": [

{

"key": 2000,

"doc_count": 2

},

{

"key": 1000,

"doc_count": 1

}

]

}

},

{

"key": "三星",

"doc_count": 1,

"brand_avg_price": {

"doc_count_error_upper_bound": 0,

"sum_other_doc_count": 0,

"buckets": [

{

"key": 8000,

"doc_count": 1

}

]

}

}

]

}

}

一定要注意这种写法,要注意这些语句的层级关系。

转载于:https://www.cnblogs.com/liuqianli/p/8535800.html

你可能感兴趣的:(36.分组聚合操作—bucket进行多层嵌套)