elasticsearch聚合统计-度量聚合

平均值聚合

1
2
3
4
5
6
7
8
9
10
11
GET /index/type/_search
{
"size": 0,
"aggs": {
"test_avg": {
"avg": {
"field": "field1"
}
}
}
}

对于缺失统计字段的数据,默认情况下聚合时会被忽略。可以通过设置missing参数,给缺失统计字段的数据一个默认值进行聚合统计。

1
2
3
4
5
6
7
8
9
10
11
12
GET /index/type/_search
{
"size": 0,
"aggs": {
"test_avg": {
"stats": {
"field": "field1",
"missing": 0
}
}
}
}

基数聚合

统计某字段唯一值得个数,相当于SQL中的SELECT COUNT(DISTINCT field1) FROM xxx

1
2
3
4
5
6
7
8
9
10
11
GET /index/type/_search
{
"size": 0,
"aggs": {
"test_cardinality": {
"cardinality": {
"field": "field1"
}
}
}
}

对于缺失统计字段的数据,默认情况下聚合时会被忽略。可以通过设置missing参数,给缺失统计字段的数据一个默认值进行聚合统计。

1
2
3
4
5
6
7
8
9
10
11
12
GET /index/type/_search
{
"size": 0,
"aggs": {
"test_cardinality": {
"cardinality": {
"field": "field1",
"missing": "N/A"
}
}
}
}

基数聚合的值并不是一个绝对的准确值,而是一个近似计数。由于es统计到高基数集时需要占用大量的内存,且各个节点之间的沟通也会占用大量的集群资源,因此效率较低。参数precision_threshold允许es为了基数统计的准确性而设置交换内存,实际的基数统计值低于precision_threshold则基数将接近准确,高于该值计数会更模糊,最大值为40000,默认值为3000。

最大值聚合

1
2
3
4
5
6
7
8
9
10
11
GET /index/type/_search
{
"size": 0,
"aggs": {
"test_max": {
"max": {
"field": "field1"
}
}
}
}

最小值聚合

1
2
3
4
5
6
7
8
9
10
11
GET /index/type/_search
{
"size": 0,
"aggs": {
"test_min": {
"min": {
"field": "field1"
}
}
}
}

和聚合

1
2
3
4
5
6
7
8
9
10
11
GET /index/type/_search
{
"size": 0,
"aggs": {
"test_sum": {
"sum": {
"field": "field1"
}
}
}
}

值计数聚合

值计数聚合对聚合文档中提取的值进行计数,通常该聚合与其他单值聚合一起使用,例如计算平均聚合时,统计有多少个值参与了平均聚合。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
GET /index/type/_search
{
"size": 0,
"aggs": {
"test_avg": {
"avg": {
"field": "field1"
}
},
"test_value_count": {
"value_count": {
"field": "field1"
}
}
}
}

统计聚合

统计聚合是多个单值聚合的汇总,包含:最小值、最大值、和、计数、平均值。

1
2
3
4
5
6
7
8
9
10
11
GET /index/type/_search
{
"size": 0,
"aggs": {
"test_stats": {
"stats": {
"field": "field1"
}
}
}
}

百分比聚合

1
2
3
4
5
6
7
8
9
10
11
GET /index/type/_search
{
"size": 0,
"aggs": {
"test_percentiles": {
"percentiles": {
"field": "field1"
}
}
}
}

默认情况下,百分比指标会计算一系列百分比:1、5、25、50、75、95、99,也可以自定义需要计算的百分比。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
GET /index/type/_search
{
"size": 0,
"aggs": {
"test_percentiles": {
"percentiles": {
"field": "price",
"percents": [
1,
5,
25,
50,
75,
95,
99
]
}
}
}
}

百分比分级聚合

计算测试值低于指定值得百分比。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
GET /index/type/_search
{
"size": 0,
"aggs": {
"test_percentile_ranks": {
"percentile_ranks": {
"field": "field1",
"values": [
10,
20
]
}
}
}
}