# histogram 区间分组
什么是 histogram ?:类似于 terms,也是进行 bucket 分组操作,接收一个 field, 按照这个 field 的值的各个范围区间,进行 bucket 分组操作
它的部分语法如下:
"histogram":{
"field": "price",
"interval": 2000
}
1
2
3
4
2
3
4
interval:2000,根据字段 price 的值划分范围,0~2000,2000~4000,4000~6000,6000~8000,8000~10000, 比如 2500,看落在哪个区间内,比如 2000~4000,此时就会将这条数据放入 2000~4000 对应的那个 bucket 中
而 terms 是将 field 值相同的数据划分到一个 bucket 中
bucket 有了之后,就可以去对每个 bucket 执行 avg、count、sum、max、min,等各种 metric 操作、聚合分析
例如:统计每隔 2000 价格区间内的电视数量和他们的总价
GET /tvs/sales/_search
{
"size" : 0,
"aggs":{
"price":{
"histogram":{
"field": "price",
"interval": 2000
},
"aggs":{
"revenue": {
"sum": {
"field" : "price"
}
}
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
响应结果
{
"took": 10,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 8,
"max_score": 0,
"hits": []
},
"aggregations": {
"price": {
"buckets": [
{
"key": 0,
"doc_count": 3,
"revenue": {
"value": 3700
}
},
{
"key": 2000,
"doc_count": 4,
"revenue": {
"value": 9500
}
},
{
"key": 4000,
"doc_count": 0,
"revenue": {
"value": 0
}
},
{
"key": 6000,
"doc_count": 0,
"revenue": {
"value": 0
}
},
{
"key": 8000,
"doc_count": 1,
"revenue": {
"value": 8000
}
}
]
}
}
}
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55