谷粒商城-高级-37 全文检索 Elasticsearch-Aggregation 聚合分析
一、简介
1、什么是ES聚合分析?
聚合提供了从数据中分组和提取数据的能力。最简单的聚合方法大致等于 SQL GROUP BY 和 SQL 聚合函数。
聚合分析是数据库中重要的功能特性,完成对一个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最大值、最小值,计算和、平均值等。ES作为搜索引擎兼数据库,同样提供了强大的聚合分析能力。
对一个数据集求最大、最小、和、平均值等指标的聚合,在ES中称为指标聚合 metric。
而关系型数据库中除了有聚合函数外,还可以对查询出的数据进行分组group by,再在组上进行指标聚合。在 ES 中group by 称为分桶,桶聚合 bucketing。
ES中还提供了矩阵聚合(matrix)、管道聚合(pipleline),但还在完善中。
2、ES聚合分析查询写法
在查询请求体中以 aggregations 节点按如下语法定义聚合分析:
"aggregations" : {
"<aggregation_name>" : { <!--聚合的名字 -->
"<aggregation_type>" : { <!--聚合的类型 -->
<aggregation_body> <!--聚合体:对哪些字段进行聚合 -->
}
[,"meta" : { [<meta_data_body>] } ]? <!--元 -->
[,"aggregations" : { [<sub_aggregation>]+ } ]? <!--在聚合里面在定义子聚合 -->
}
[,"<aggregation_name_2>" : { ... } ]*<!--聚合的名字 -->
}
说明:aggregations 也可简写为 aggs
3. 聚合分析的值来源
聚合计算的值可以取字段的值,也可是脚本计算的结果。
二、指标聚合
1. max min sum avg
示例1:查询所有客户中余额的最大值
POST /bank/_search?
{
"size": 0,
"aggs": {
"masssbalance": {
"max": {
"field": "balance"
}
}
}
}
结果1:
{
"took": 2080,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1000,
"max_score": 0,
"hits": []
},
"aggregations": {
"masssbalance": {
"value": 49989
}
}
}
示例2:值来源于脚本,查询所有客户的平均年龄是多少,并对平均年龄加10
POST /bank/_search?size=0
{
"aggs": {
"avg_age": {
"avg": {
"script": {
"source": "doc.age.value"
}
}
},
"avg_age10": {
"avg": {
"script": {
"source": "doc.age.value + 10"
}
}
}
}
}
结果2:
{
"took": 86,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1000,
"max_score": 0,
"hits": []
},
"aggregations": {
"avg_age": {
"value": 30.171
},
"avg_age10": {
"value": 40.171
}
}
}
三、桶聚合

-
Terms Aggregation 根据字段值项分组聚合
示例1:POST /bank/_search?size=0 { "aggs": { "age_terms": { "terms": { "field": "age" } } } }结果:
{ "took": 2000, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 1000, "max_score": 0, "hits": [] }, "aggregations": { "age_terms": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 463, "buckets": [ { "key": 31, "doc_count": 61 }, { "key": 39, "doc_count": 60 }, { "key": 26, "doc_count": 59 }, { "key": 32, "doc_count": 52 }, { "key": 35, "doc_count": 52 }, { "key": 36, "doc_count": 52 }, { "key": 22, "doc_count": 51 }, { "key": 28, "doc_count": 51 }, { "key": 33, "doc_count": 50 }, { "key": 34, "doc_count": 49 } ] } } }
相关文章:
elasticsearch系列六:聚合分析(聚合分析简介、指标聚合、桶聚合)
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)