一, 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 } } ] } } ] }