-
分组聚合:以tag分组,并计算每个分组下的数量
GET accounts/person/_search
{
"size": 0,
"aggs": {//aggregations的简写,聚集,集合
"group_by_tag": {
"terms": {
"field": "tag"
}
}
}
}
返回:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 5,//搜索到的数量
"max_score": 0,
"hits": []
},
"aggregations": {
"group_by_tag": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "boy",
"doc_count": 3
},
{
"key": "girl",
"doc_count": 2
}
]
}
}
}
如果返回如下错误:
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [title] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."
}
],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "query",
"grouped": true,
"failed_shards": [
{
"shard": 0,
"index": "accounts",
"node": "pVi8N2hST5yhQJgwpYlsig",
"reason": {
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [title] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."
}
}
],
"caused_by": {
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [title] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."
}
},
"status": 400
}那么需要执行如下操作:
PUT accounts/_mapping/person { "properties": { "tag":{ "type": "text", "fielddata": true } } } 返回: { "acknowledged": true }
-
先搜索,再分组聚合:搜索title包含业务员,并且以tag分组,并计算每个分组下的数量
GET accounts/person/_search
{
"size": 0,
"query": {
"match": {
"title": "业务员"
}
},
"aggs": {
"group_by_tag": {
"terms": {
"field": "tag"
}
}
}
}
返回:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,//搜索到的数量
"max_score": 0,
"hits": []
},
"aggregations": {
"group_by_tag": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "boy",
"doc_count": 1
},
{
"key": "girl",
"doc_count": 1
}
]
}
}
}
-
先分组,再计算每组的平均值
以tag分组,并计算每个分组下age的平均值
GET accounts/person/_search
{
"size": 0,
"aggs": {
"group_by_tag": {
"terms": {
"field": "tag"
},
"aggs": {
"avg_age": {//返回的平均值的key
"avg": {//计算平均值
"field": "age"
}
}
}
}
}
}
返回:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"group_by_tag": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "boy",
"doc_count": 3,
"avg_age": {
"value": 35
}
},
{
"key": "girl",
"doc_count": 2,
"avg_age": {
"value": 40
}
}
]
}
}
}
-
先分组,再计算每组的平均值,并且按照平均值倒序
以tag分组,并计算每个分组下age的平均值,并且按照平均值倒序
GET accounts/person/_search
{
"size": 0,
"aggs": {
"group_by_tag": {
"terms": {
"field": "tag",
"order": {
"avg_age": "desc"//倒序
}
},
"aggs": {
"avg_age": {
"avg": {
"field": "age"
}
}
}
}
}
}
返回:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"group_by_tag": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "girl",
"doc_count": 2,
"avg_age": {
"value": 40
}
},
{
"key": "boy",
"doc_count": 3,
"avg_age": {
"value": 35
}
}
]
}
}
}
-
先按照指定范围分组,然后按tag分组,并且计算每个分组的平均值
GET accounts/person/_search
{
"size": 0,
"aggs": {
"group_age_range": {
"range": {//按指定范围分组
"field": "age",
"ranges": [
{
"from": 10,
"to": 31
},
{
"from": 31,
"to": 60
}
]
},
"aggs": {
"group_tag": {
"terms": {//按tag分组
"field": "tag"
},
"aggs": {
"age_avg": {
"avg": {//计算分组的平均值
"field": "age"
}
}
}
}
}
}
}
}
返回:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"group_age_range": {
"buckets": [
{
"key": "10.0-31.0",
"from": 10,
"to": 31,
"doc_count": 3,
"group_tag": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "boy",
"doc_count": 2,
"age_avg": {
"value": 25
}
},
{
"key": "girl",
"doc_count": 1,
"age_avg": {
"value": 10
}
}
]
}
},
{
"key": "31.0-60.0",
"from": 31,
"to": 60,
"doc_count": 2,
"group_tag": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "boy",
"doc_count": 1,
"age_avg": {
"value": 40
}
},
{
"key": "girl",
"doc_count": 1,
"age_avg": {
"value": 50
}
}
]
}
}
]
}
}
}