fir*_*ves 0 java elasticsearch
我正在尝试为存储桶排序聚合实现分页。我有这个工作查询:
GET /test/_search
{
"query": {
"bool": {
"must": [
{ "match": { "code": 66 }}
]
}
},
"aggs": {
"group_by_user": {
"terms": {
"field": "userId.keyword"
},
"aggs": {
"total_points": {
"sum": {
"field": "points"
}
},
"test_bucket_sort": {
"bucket_sort": {
"sort": [
{"total_points": {"order": "desc"}}
],
"size": 3,
"from": 1
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它正在工作并返回 3 个聚合记录,跳过第一个。现在我试图用 Java API 重现这个查询。我跳过不相关的代码,只发布“aggs”部分:
this.aggregationBuilder = AggregationBuilders
.terms("group_by_user")
.field("userId.keyword")
.subAggregation(AggregationBuilders.sum("total_points").field("points"))
.order(BucketOrder.aggregation("total_points", false))
.size(5);
Run Code Online (Sandbox Code Playgroud)
我找不到指定的方法from(1)
,有人知道它是否未在 Java API 中实现或者是否存在解决方法?
这是一个好的开始,但是,您没有使用正确的代码进行bucket_sort
管道聚合。这是你应该做的:
List sort = Arrays.asList(new FieldSortBuilder("total_points").order(SortOrder.DESC));
BucketSortPipelineAggregationBuilder bucketSort = PipelineAggregatorBuilders.bucketSort("test_bucket_sort", sort).from(1).size(3);
this.aggregationBuilder = AggregationBuilders
.terms("group_by_user")
.field("userId.keyword")
.subAggregation(AggregationBuilders.sum("total_points").field("points"))
.subAggregation(bucketSort)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
406 次 |
最近记录: |