Elasticsearch的区间聚合(Bucket Aggregation)能够帮助我们对数据进行分组,我们可以定义一些区间(Buckets),然后将符合这些区间的文档分配到对应的区间中。
以下是一个使用Elasticsearch的Python客户端来创建一个区间聚合(Interval Aggregation)的例子:
from datetime import datetime
from elasticsearch import Elasticsearch
# 连接到Elasticsearch
es = Elasticsearch(hosts=["localhost:9200"])
# 定义区间聚合查询
query = {
"size": 0,
"aggs": {
"interval_aggr": {
"date_histogram": {
"field": "timestamp",
"interval": "1d", # 每天一个区间
"format": "yyyy-MM-dd",
"min_doc_count": 0 # 即使某个区间没有文档,也会显示
}
}
}
}
# 执行查询
response = es.search(index="your_index", body=query)
# 打印结果
for bucket in response['aggregations']['interval_aggr']['buckets']:
print(bucket['key_as_string'], bucket['doc_count'])
在这个例子中,我们使用了date_histogram
聚合类型来根据时间字段timestamp
进行区间聚合,每个区间是一天(1d
)。min_doc_count
参数设置为0,意味着即使某个区间内没有文档,也会在结果中显示该区间,并且doc_count
为0。