- Kibana:6.7.1
实例数据
查询用到的数据是个名为cars的索引,里面保存了多条汽车销售记录,字段有品牌(make)、颜色(color)、价格(price)、售卖时间(sold)等,在elasticsearch-head查看数据如下图:
如果您想将上图中的数据导入到自己的es环境,请参考《Elasticsearch聚合学习之一:基本操作》,文中有详细的导入步骤;
对内层桶排序
针对前面提到的需求:统计每个汽车品牌下的每种颜色汽车的销售额,通常做法是:先按照品牌聚合,生成的每个桶(bucket)内有这个品牌的所有销售记录,然后将每个桶内的文档再按照颜色聚合,这样每个桶内就有多个子桶,每个子桶内就是每个品牌下每种颜色的销售记录。
既然每个桶内有多个子桶,那么就可以对这些子桶桶进行排序,如下图,可以对红框内的数据进行排序:
请求DSL如下:
GET /cars/transactions/_search
{
“size”: 0,
“aggs”: {
“make_agg”: {
“terms”: { —外层桶,按照汽车品牌聚合
“field”: “make” —字段是make
},
“aggs”: {
“color_agg”: {
“terms”: { —内层桶,按照汽车颜色聚合
“field”: “color”, —字段是color
“order”: { —要求内层桶排序
“make_color_sales_rank”: “desc” —排序字段是make_color_sales_rank&#x