- 正常情况下是不支持聚合后分页的,以下的原理是按照某个字段分组(桶),再对组(桶)进行排序或直接截断(分页)
- 分页后是得不到分组后的组的总个数,目前采用的方法是先去查询组的总个数,然后分页,接着将两个结果合在一起使用
POST /log_*/_search
{
"size": 0,
"aggs": {
"day": {
"date_histogram": {
"field": "@timestamp",
"interval": "day",
"format": "yyyy-MM-dd"
},
"aggs": {
"bucket_truncate": {
"bucket_sort": {
"from": 0,
"size": 20
}
}
}
}
}
}
解释
- 第一个size
表示返回0条数据(hits中的数据)
-
第一个aggs
表示对@timestamp按照天进行分组,并将结果进行日期格式化 -
第二个aggs
对结果进行排序,这里没有排序,只做了截断(分页)
这样就实现了对聚合的结果进行了分页
备注
获取分组后,分了几组(总数),可以再次调用接口查询数据,取查询到数据的个数即可(记得去掉第二的aggs),这是目前想到最笨的办法,如果你有更好的办法可以分享一下呦!
官网:
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-aggregations-pipeline-bucket-sort-aggregation.html