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" } } } } } }