聚合查询
原文链接:https://blog.csdn.net/zjun1001/article/details/124536727
平均值、总和、最大、最小、数量
在es中,所有的聚合查询都是放在aggs中进行的。平均值、总和、最大、最小、数量对应的关键字分别是:avg、sum、max、min、value_count
POST /bank/_search
{
"query": {
"match": {
"address": "mill"
}
},
"aggs": {
"ageAvg": {
"avg": {
"field": "age"
}
},
"ageSum": {
"sum": {
"field": "age"
}
},
"ageMax":{
"max": {
"field": "age"
}
},
"ageMin":{
"min": {
"field": "age"
}
},
"ageCount":{
"value_count": {
"field": "age"
}
}
},
"size": 0
}
分组
分组用到的关键字是terms
POST /bank/_search
{
"query": {
"match": {
"address": "mill"
}
},
"aggs": {
"ageGroup": {
"terms": {
"field": "age",
"size": 3
}
}
},
"size": 0
}
上面语句中的size:3,指的是分组后,只展示前三个分组内容。size:0,指的是所有query查询结果,也就是原始数据,不需要展示。此外,还可以对分组内容进行排序。
1.分组后,按分组内的文档数量排序
POST /bank/_search
{
"aggs": {
"ageGroup": {
"terms": {
"field": "age",
"order": {
"_count": "asc"
}
}
}
},
"size": 0
}
2.分组后,按分组字段排序
POST /bank/_search
{
"aggs": {
"ageGroup": {
"terms": {
"field": "age",
"order": {
"_key": "desc"
}
}
}
},
"size": 0
}
3.显示分组后,文档数量大于60的
POST /bank/_search
{
"aggs": {
"ageGroup": {
"terms": {
"field": "age",
"min_doc_count": 60
}
}
},
"size": 0
}
分组+子聚合
先按age分组,之后统计分组内的平均值和总和。
POST /bank/_search
{
"query": {
"match": {
"address": "mill"
}
},
"aggs": {
"ageAgg": {
"terms": {
"field": "age",
"size": 3
},
"aggs": {
"ageAvg": {
"avg": {
"field": "age"
}
},
"ageSum": {
"sum": {
"field": "age"
}
}
}
}
},
"size": 0
}
分段分组+子聚合
先按age分组,分成18-28、28-38两组。之后统计各组的最小值和平均值。
POST /bank/_search
{
"query": {
"match": {
"address": "mill Road"
}
},
"aggs": {
"ageGroup": {
"range": {
"field": "age",
"ranges": [
{
"from": 18,
"to": 28
},
{
"from": 28,
"to": 38
}
]
},
"aggs":{
"ageMin":{
"min": {
"field": "age"
}
},
"ageAve":{
"avg": {
"field": "age"
}
}
}
}
},
"size": 0
}
指定分组+聚合
查询全部,但分组时候,只统计age=30的所有文档的平均值,最大最小等数据,用stats关键字代表。
POST /bank/_search
{
"aggs": {
"ageGroup": {
"filter": {
"term": {
"age": "30"
}
},
"aggs": {
"stat": {
"stats": {
"field": "age"
}
}
}
}
},
"size": 0
}
多种聚合结果统一查询
这里的多种聚合,指的是常用的平均值、最大最小、总和等。除了开始讲到的min、max、avg等关键字外,还可以用stats关键字。一个stats就可以包含min/max/avg/sum等。
POST /bank/_search
{
"query": {
"range": {
"age": {
"gte": 10,
"lte": 20
}
}
},
"aggs": {
"stat": {
"stats": {
"field": "age"
}
}
},
"size": 0
}