进阶-第34__深入聚合数据分析_实战bucket+metric:统计每种颜色电视平均价格

需求:统计每种颜色电商的平均价格

 

按照color去分bucket,可以拿到每个color bucket中的数量,这个仅仅只是一个bucket操作,doc_count其实只是es的bucket操作默认执行的一个内置metric

 

这一讲,就是除了bucket操作,分组,还要对每个bucket执行一个metric聚合统计操作

 

查询

在一个aggs执行的bucket操作(terms),平级的json结构下,再加一个aggs,这个第二个aggs内部,同样取个名字,执行一个metric操作,avg,对之前的每个bucket中的数据的指定的field,price field,求一个平均值

 

"aggs": {

   "avg_price": {

      "avg": {

         "field": "price"

      }

   }

}

 

就是一个metric,就是一个对一个bucket分组操作之后,对每个bucket都要执行的一个metric

 

第一个metric,avg,求指定字段的平均值

 

GET /tvs/sales/_search

{

   "size" : 0,

   "aggs": {

      "colors": {

         "terms": {

            "field": "color"

         },

         "aggs": {

            "avg_price": {

               "avg": {

                  "field": "price"

               }

            }

         }

      }

   }

}

结果

{

  "took": 8,

  "timed_out": false,

  "_shards": {

    "total": 5,

    "successful": 5,

    "failed": 0

  },

  "hits": {

    "total": 8,

    "max_score": 0,

    "hits": []

  },

  "aggregations": {

    "colors": {

      "doc_count_error_upper_bound": 0,

      "sum_other_doc_count": 0,

      "buckets": [

        {

          "key": "红色",

          "doc_count": 4,

          "avg_price": {

            "value": 3250

          }

        },

        {

          "key": "绿色",

          "doc_count": 2,

          "avg_price": {

            "value": 2100

          }

        },

        {

          "key": "蓝色",

          "doc_count": 2,

          "avg_price": {

            "value": 2000

          }

        }

      ]

    }

  }

}

 

 

 

buckets,除了key和doc_count

avg_price:我们自己取的metric aggs的名字

value:我们的metric计算的结果,每个bucket中的数据的price字段求平均值后的结果

 

select avg(price)

from tvs.sales

group by color

猜你喜欢

转载自blog.csdn.net/qq_35524586/article/details/88554527