1、aggregation (执行聚合)
聚合提供了从数据中分组和提取数据的能力。最简单的聚合大致等于SQL的聚合函数。
在ElasticSearch中,你有执行搜索返回hit,并且同时返回聚合结果,把一个响应中所有hits分隔开的
能力,这是非常强大且有效的。您可以执行查询和多个聚合并且在一次使用中得到各自的返回结果,使用一次简介和简化的api来避免网络往返
语法
"aggregations" : {
"<aggregation_name>" : { //聚合名称
"<aggregation_type>" : { //聚合类型
<aggregation_body> //聚合体
}
[,"meta" : { [<meta_data_body>] } ]?
[,"aggregations" : { [<sub_aggregation>]+ } ]?
}
[,"<aggregation_name_2>" : { ... } ]*
}
1)需求:搜索address中包含mail的所有人的年龄和平均工资,但不显示这些人的详情
GET bank/_search
{
"query": {
"match": {
"address": "mill"
}
},
"aggs": {
"ageagg": {
"terms": {
"field": "age",
"size": 10
}
},
"ageavg":{
"avg": {
"field": "age"
}
},
"balanceavg":{
"avg": {
"field": "balance"
}
}
}
}
2)按照年龄聚合,并求这些年龄段的人的平均薪资
(聚合里面套聚合)
GET /bank/_search
{
"query":{
"match_all": {}
},
"aggs": {
"ageAgg": {
"terms": {
"field": "age",
"size": 10
},
"aggs": {
"balanceAvg": {
"avg": {
"field": "balance"
}
}
}
}
},
"size": 0 ##过滤掉查询的结果
}
3)查出所有的年龄分布,并且这些年龄段中M的平均薪资和F的平均薪资,以及这个年龄段总体的平均薪资
GET bank/_search
{
"query": {
"match_all": {}
},
"aggs": {
"agegg": { //聚合年龄
"terms": {
"field": "age",
"size": 100
},
"aggs": {
"genderagg":{ //在年龄的聚合结果上聚合性别
"terms": {
"field": "gender.keyword",
"size": 2
},
"aggs": {
"balanceagg": { //xx岁 M性别的平均薪资
"avg": {
"field": "balance"
}
}
}
},
"agebalanceaavg":{ //xx岁的平均薪资
"avg": {
"field": "balance"
}
}
}
}
}
}