概述
继续跟中华石杉老师学习ES,第44篇
课程地址: https://www.roncoo.com/view/55
案例
需求: 颜色+品牌下钻分析时按最深层metric进行排序
先看下默认的排序规则:
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 }
截取下Red 来看下默认的排序规则 (doc_count 降序)
如果想按照平均价格 降序排列呢? 我们这里有2层下钻,而平均价格是在第二层下钻里 ,即我们这里的主题【按最深层metric进行排序】
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 }
返回结果:
{ "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 降序排列啦。