参考 : ElasticSearch--聚合分析(group by, avg,sort等)_小毛贼_哪里逃-CSDN博客
根据name字段分组然后age字段求avg
POST /test_index_2022/_search?size=0
{
"aggs": {
"group_by_tag": {
"terms": {
"field": "name"
},
"aggs": {
"avg_age": {
"avg": {
"field": "age"
}
}
}
}
}
}
查询age是18至20的,并且sex是女的,然后根据name分组求age字段avg
POST /test_index_2022/_search?size=0
{
"query": {
"bool": {
"must": [
{
"range": {
"age": {
"gte": "18",
"lte": "20"
}
}
},
{
"term": {
"sex": "女"
}
}
]
}
},
"aggs": {
"group_by_tag": {
"terms": {
"field": "name"
},
"aggs": {
"avg_age": {
"avg": {
"field": "age"
}
}
}
}
}
}
curl
curl -H "Content-Type:application/json" -XGET http://127.0.0.1:9200/test_index*/_search?pretty -d \
'{
"query": {
"bool": {
"must": [
{
"range": {
"age": {
"gte": "18",
"lte": "20"
}
}
},
{
"term": {
"sex": "女"
}
}
]
}
},
"aggs": {
"group_by_tag": {
"terms": {
"field": "name"
},
"aggs": {
"avg_age": {
"avg": {
"field": "age"
}
}
}
}
}
}'
结果
{
"took" : 705,
"timed_out" : false,
"_shards" : {
"total" : 8,
"successful" : 8,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"group_by_key" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "name",
"doc_count" : 123,
"avg_age" : {
"age" : 17
}
}
]
}
}
}
java取值
Double avg = JSONObject.parseObject(res).getJSONObject("aggregations").getJSONObject("group_by_key").getJSONArray("buckets").getJSONObject(0).getJSONObject("avg_value").getDouble("value");