一、基本概念
聚合就是在对文档按字段分组的基础上,去做一些处理,然后返回数据。
聚合的字段,是需要正排索引的,如果需要用类型为text的字段聚合,那就需要用fild.keyword
1、aggs关键字:
聚合的关键字,一个aggs里面可以包含多个聚合(聚合里面还可以包含子聚合)
每个聚合是独立的,并且不管query是在前面还是后面写,
聚合的基础数据都是query语句筛选之后的。
2、4种聚合类型
(1)、Bucketing,桶聚合
类似于sql的groupy语句,就是对字段进行分组,一个分组数据就是一个桶。
(2)、Metric,指标聚合
类似于sqk里面的avg、sum等函数,对单个值(单值聚合)或者多个值(多值聚合)进行
聚合统计。
(3)、Pipeline,管道聚合
在其它聚合的基础之上再进行二次聚合
3、例子说明:
(1)、Bucketing,桶聚合
term关键字就是桶聚合,设置桶聚合的匹配字段是gender
http://112.74.48.31:9200/customer/_search?size=0 ---GET
{
"aggs":{
"metoo_group":{
--自定义聚合名称
"terms":{
-- 匹配关键字
"field":"gender" --gener字段
}
}
}
}
结果
{
"took": 46,
"timed_out": false,
"_shards": {
-- 分片
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 10,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"metoo_group": {
-- 定义的桶名
"doc_count_error_upper_bound": 0, --被遗漏的terms 可能的最大值
"sum_other_doc_count": 0, --除了返回给用户的terms,剩下的terms总数
"buckets": [
{
"key": "男",
"doc_count": 6
},
{
"key": "女",
"doc_count": 4
}
]
}
}
}
桶聚合的基础上进行子聚合,这是桶聚合与指标聚合的父子聚合
子聚合与父聚合的结果是平级的,以下例子,terms就是父聚合的结果集,所以子聚合就需要卸载terms
同一级的后面。
结果就是在分桶的基础上去计算每个桶里面的age的平均数。
http://112.74.48.31: