两个主要概念
1、bucket:一个数据分组,如group by city,对于相同的city就放在同一个bucket中。
2、metric:对一个数据分组执行的统计,即对某一个bucket执行聚合分析,如求平均、求和、最大、最小等。
例子一:
#计算每个studymodel下的商品数量
#类同select studymodel,count(*) from book group by studymodel
GET /book/_search
{
"size": 0, #表示hits里面的数据,0表示不显示原始数据
"query": {
"match_all": {} #这里可以带上搜索条件,相当于where条件
},
"aggs": {
"group_by_model": { #别名
"terms": { "field": "studymodel" } #聚合的条件
}
}
}
例子二:
#先分组,再算每组的平均值,计算每个tag下的商品的平均价格
GET /book/_search
{
"size": 0,
"aggs" : {
"group_by_tags" : {
"terms" : {
"field" : "tags",
"order": { #设置根据avg_price倒序排序
"avg_price": "desc"
}
},
"aggs" : { #在aggs里面再加一个子aggs,即可实现
"avg_price" : {
"avg" : { "field" : "price" } ##通过avg函数统计平均值
}
}
}
}
}
例子三:
#按照指定的价格范围区间进行分组,然后在每组内再按照tag进行分组,最后再计算每组的平均价格
GET /book/_search
{
"size": 0,
"aggs": {
"group_by_price": {
"range": {
"field": "price",
"ranges": [
{
"from": 0,
"to": 40
},
{
"from": 40,
"to": 60
},
{
"from": 60,
"to": 80
}
]
},
"aggs": {
"group_by_tags": {
"terms": {
"field": "tags"
},
"aggs": {
"average_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
}
}