文章目录
- 基础知识
-
- 案例
基础知识
bucket 其实就是分组 相当于msql 中 group by
metric 就是统计 相当于 mysql 中的count
案例
以一个家电卖场中的电视销售数据为背景,来对各种品牌,各种颜色的电视的销量和销售额,进行各种各样角度的分析
GET /tvs/sales/_search
{
"size": 0,
"aggs": {
"ppp": {
"terms": {
"field": "color"
}
}
}
}
size:0 只获取统计之后的结果,统计用到的原始数据不显示
aggs:固定语法聚合统计的标志
ppp:为聚合后的字段随便起一个名字
terms:需要分组的字段
对每种颜色的家电求平均值
GET /tvs/sales/_search
{
"size": 0,
"aggs": {
"colors": {
"terms": {
"field": "color"
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
根据color分bucket之后 每个bucket再求平均值
在第一个aggs 里面 平级的json结购再添加一个aggs
每种颜色的平均价格,以及找到每种颜色每个品牌的平均价格
我们可以进行多层次的下钻
比如说,现在红色的电视有4台,同时这4台电视中,有3台是属于长虹的,1台是属于小米的
红色电视中的3台长虹的平均价格是多少?
红色电视中的1台小米的平均价格是多少?
GET /tvs/sales/_search
{
"size": 0,
"aggs": {
"colors": {
"terms": {
"field": "color"
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
},
"group_brand":{
"terms": {
"field": "brand"
},
"aggs": {
"b_avg_p": {
"avg": {
"field": "price"
}
}
}
}
}
}
}
}
一次bucket之后多次metric 多次计算 取最大 最小 平均 求和
GET /tvs/sales/_search
{
"size" : 0,
"aggs": {
"colors": {
"terms": {
"field": "color"
},
"aggs": {
"avg_price": { "avg": { "field": "price" } },
"min_price" : { "min": { "field": "price"} },
"max_price" : { "max": { "field": "price"} },
"sum_price" : { "sum": { "field": "price" } }
}
}
}
}
histogram:区间分组,0-2000 ,2000-4000 来分组
统计各个价格区间内的家电的销售总和
GET /tvs/sales/_search
{
"size": 0,
"aggs": {
"price": {
"histogram": {
"field": "price",
"interval": 2000
},
"aggs": {
"revenue": {
"sum": {
"field": "price"
}
}
}
}
}
}
date histogram,按照我们指定的某个date类型的日期field,以及日期interval,按照一定的日期间隔,去划分bucket
GET /tvs/sales/_search
{
"size" : 0,
"aggs": {
"sales": {
"date_histogram": {
"field": "sold_date",
"interval": "month",
"format": "yyyy-MM-dd",
"min_doc_count" : 0,
"extended_bounds" : {
"min" : "2016-01-01",
"max" : "2017-12-31"
}
}
}
}
}
min_doc_count:即使某个日期interval,2017-01-01~2017-01-31中,一条数据都没有,那么这个区间也是要返回的,不然默认是会过滤掉这个区间的
extended_bounds,min,max:划分bucket的时候,会限定在这个起始日期,和截止日期内
欢迎大家关注我的微信公众号 您的关注就是我不懈的动力