ElasticSearch聚合函数的例子代码, 留以查找使用
ES 的聚合函数分为: 桶聚合函数, 度量函数, 管道聚合函数
其中, 桶聚合函数, 可以理解为使用的 sql group by 后面的条件
度量函数, 可以理解为 sql 中的查询聚合函数: avg , sum, min, max
管道聚合函数, 则是把各个分组在聚合在一起计算的函数, 比如计算经过 color 分组之后, 每个分组内的某一个属性, 有什么特征, 在度量计算
因为其功能庞大, 在使用时, 需要查找翻看 es 的权威指南来实现具体的业务场景, 本文只简单记录两个模版方法, 用于快速记忆, 具体使用还是要参考当前环境版本的 es 权威指南来操作
简单的聚合
1
2
3
4
5
6
7
8
9
10
11
GET /cars/transactions/_search
{
"size" : 0,
"aggs" : {
"popular_colors" : {
"terms" : {
"field" : "color"
}
}
}
}
可能会注意到我们将 size 设置成 0 。我们并不关心搜索结果的具体内容,所以将返回记录数设置为 0 来提高查询速度。 设置 size: 0 与 Elasticsearch 1.x 中使用 count 搜索类型等价。
度量指标
select count(1) as doc_count, avg(price) as avg_price from transactions group by color
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
GET /cars/transactions/_search
{
"size" : 0,
"aggs": {
"colors": {
"terms": {
"field": "color"
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
"aggregations": {
"colors": {
"buckets": [
{
"key": "red",
"doc_count": 4,
"avg_price": {
"value": 32500
}
},
{
"key": "blue",
"doc_count": 2,
"avg_price": {
"value": 20000
}
}
]
}
}
更高级的嵌套使用方式参考: https://www.elastic.co/guide/cn/elasticsearch/guide/current/_one_final_modification.html
更多聚合操作指引查询: https://www.elastic.co/guide/en/elasticsearch/reference/8.4/search-aggregations.html