ElasticSearch的java分组后分页——关于BucketSortPipelineAggregationBuilder的问题
es 聚合后进行分页(非标准分页,涉及到es底层的检索方式)es 桶聚合后排序介绍见ES指南介绍// kibana对聚合后的数据GET /_search{"query": {"bool": {"filter": [{"match": {"question": "好的"}},{"range": {
·
es 聚合后进行分页(非标准分页,涉及到es底层的检索方式)
es 桶聚合后排序介绍见ES指南介绍
// kibana对聚合后的数据
GET /_search
{
"query": {
"bool": {
"filter": [
{
"match": {
"question": "好的"
}
},
{
"range": {
"createTime": {
"gte": 1605283200000,
"lte": 1610726400000
}
}
}
]
}
},
"aggs": {
"by_sessionId": {
"terms": {
"field": "sessionId",
// 查询的聚合数据量,需要大于from+size,具体多少合适需要自己测试
"size": 100
},
"aggs": {
"bucket_field": {
"bucket_sort": {
//可添加"sort"字段排序,默认按照doc_count降序
// 分页(聚合结果截取)
"from": 0,
"size": 10
}
}
}
}
},
"size": 0
}
TermsAggregationBuilder sessionIdBuilder = AggregationBuilders
.terms("by_sessionId")
.field("sessionId")
.size(100)
.subAggregation(new BucketSortPipelineAggregationBuilder("bucket_sort", null)
.from(0)
.size(10));
注意问题:
BucketSortPipelineAggregationBuilder类不存在
当我们在maven中将elasticsearch的版本从7.x降级到6.x的时候发现,找不到BucketSortPipelineAggregationBuilder类。
但是在kibana中发现是可以使用bucket sort的。
此时我们进行代码分析:
- TermsAggregationBuilder调用BucketSortPipelineAggregationBuilder使用的是第二种方法
- 发现PipelineAggregationBuilder抽象类存在BucketSortPipelineAggregationBuilder子类
- 进入BucketSortPipelineAggregationBuilder,发现6.x与7.x的类路径不同。
// 6.x包路径
org.elasticsearch.search.aggregations.pipeline.bucketsort
// 7.x包路径
org.elasticsearch.search.aggregations.pipeline
更多推荐
所有评论(0)