概述
继续跟中华石杉老师学习ES,第44篇
课程地址: https://www.roncoo.com/view/55
案例
需求: 颜色 品牌下钻分析时按最深层metric进行排序
先看下默认的排序规则:
代码语言:javascript复制GET /tvs/sales/_search
{
"aggs": {
"group_by_color": {
"terms": {
"field": "color"
},
# 在color这个bucket下 下钻 品牌
"aggs": {
"group_by_brand": {
"terms": {
"field": "brand"
},
# 在brand这个b下 bcketmetrics 求 avg
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
},
"size": 0
}
返回:
代码语言:javascript复制{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 8,
"max_score": 0,
"hits": []
},
"aggregations": {
"group_by_color": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "红色",
"doc_count": 4,
"group_by_brand": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "长虹",
"doc_count": 3,
"avg_price": {
"value": 1666.6666666666667
}
},
{
"key": "三星",
"doc_count": 1,
"avg_price": {
"value": 8000
}
}
]
}
},
{
"key": "绿色",
"doc_count": 2,
"group_by_brand": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "TCL",
"doc_count": 1,
"avg_price": {
"value": 1200
}
},
{
"key": "小米",
"doc_count": 1,
"avg_price": {
"value": 3000
}
}
]
}
},
{
"key": "蓝色",
"doc_count": 2,
"group_by_brand": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "TCL",
"doc_count": 1,
"avg_price": {
"value": 1500
}
},
{
"key": "小米",
"doc_count": 1,
"avg_price": {
"value": 2500
}
}
]
}
}
]
}
}
}
截取下Red 来看下默认的排序规则 (doc_count 降序)
如果想按照平均价格 降序排列呢? 我们这里有2层下钻,而平均价格是在第二层下钻里 ,即我们这里的主题【按最深层metric进行排序】
代码语言:javascript复制GET /tvs/sales/_search
{
"aggs": {
"group_by_color": {
"terms": {
"field": "color"
},
"aggs": {
"group_by_brand": {
"terms": {
"field": "brand",
"order": {
"avg_price": "desc"
}
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
},
"size": 0
}
返回结果:
代码语言:javascript复制{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 8,
"max_score": 0,
"hits": []
},
"aggregations": {
"group_by_color": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "红色",
"doc_count": 4,
"group_by_brand": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "三星",
"doc_count": 1,
"avg_price": {
"value": 8000
}
},
{
"key": "长虹",
"doc_count": 3,
"avg_price": {
"value": 1666.6666666666667
}
}
]
}
},
{
"key": "绿色",
"doc_count": 2,
"group_by_brand": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "小米",
"doc_count": 1,
"avg_price": {
"value": 3000
}
},
{
"key": "TCL",
"doc_count": 1,
"avg_price": {
"value": 1200
}
}
]
}
},
{
"key": "蓝色",
"doc_count": 2,
"group_by_brand": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "小米",
"doc_count": 1,
"avg_price": {
"value": 2500
}
},
{
"key": "TCL",
"doc_count": 1,
"avg_price": {
"value": 1500
}
}
]
}
}
]
}
}
}
同样的,我们也截取下Red 来看下默认的排序规则 (doc_count 降序)
已经按照我们指定的 avg_price 降序排列啦。