一, group分组
将所有学生按照年龄分组,并得出每个组合的个数。
GET school3/student2/_search
{
"size"=0, //加上size=0,就不会打印操作的具体数据
"aggs":{
"group_age":{
"terms": {
"field": "age"
}
}
}
}
结果:
Buckets. Key:分组的关键字。
Buckets. Count:该分组里数据的个数。
"aggregations": {
"group_age": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 23,
"doc_count": 1
},
{
"key": 25,
"doc_count": 1
},
{
"key": 28,
"doc_count": 1
},
{
"key": 29,
"doc_count": 1
},
{
"key": 89,
"doc_count": 1
}
]
}
字符串分组会报错,要修改mapping中name字段的fielddata为true
PUT school3/_mapping/student2
{
"properties": {
"name":{
"type":"text",
"fielddata":"true"
}
}
}
二,先查询再进行分组。
先查询出来name中包含夏文杰的数据,再通过age进行分组,再计算出每个分组的数量。
GET school3/student2/_search
{
"query": {
"match": {
"name":"夏文杰"
}
},
"aggs":{
"group_name":{
"terms":{
"field": "age"
}
}
}
}
三,先分组,再对各组中的数据做求平均,
按照学生的age进行分组,求出每组学生中的分数平均值
GET school3/student2/_search
{
"size": 0,
"aggs":{
"group_name":{
"terms": {
"field":"age"
},
"aggs": {
"avg_score": {
"avg": {
"field":"score"
}
}
}
}
}
}
四,基于上一个做排序
按照学生的age进行分组,求出每组学生中的分数平均值,并按照分数平均值的大小降序排序。
GET school3/student2/_search
{
"size": 0,
"aggs":{
"group_name":{
"terms": {
"field":"age",
"order": {
"avg_score":"desc"
}
},
"aggs": {
"avg_score": {
"avg": {
"field":"score"
}
}
}
}
}
}
五.基于上面的再加上自定义分组。
先对score进行自定义分组1-90,90-100,再根据age进行分组,再算出分组中score的平均值。
GET school3/student2/_search
{
"size": 0,
"aggs":{
"group_score":{
"range": {
"field":"score",
"ranges":[
{
"from":1,
"to":90
},
{
"from":90,
"to":100
}
]
},
"aggs": {
"group_age": {
"terms": {
"field":"age"
},
"aggs": {
"avg_score": {
"avg": {
"field":"score"
}
}
}
}
}
}
}
}
结果:
"aggregations":{
"group_score": {
"buckets": [
{
"key":"1.0-90.0",
"from": 1,
"to": 90,
"doc_count": 3,
"group_age": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 23,
"doc_count": 1,
"avg_score": {
"value": 11
}
},
{
"key": 25,
"doc_count": 1,
"avg_score": {
"value": 11
}
},
{
"key": 89,
"doc_count": 1,
"avg_score": {
"value": 12
}
}
]
}
},
{
"key":"90.0-100.0",
"from": 90,
"to": 100,
"doc_count": 1,
"group_age": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 28,
"doc_count": 1,
"avg_score": {
"value": 99
}
}
]
}
}
]
}