java - 如何在桶排序聚合期间在 Java Elasticsearch 客户端中指定 from 子句
问题描述
我正在尝试为桶排序聚合实现分页。我有这个工作查询:
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
}
}
}
}
}
}
它正在工作并返回 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);
我找不到指定的方法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)
推荐阅读
- java - 在 OpenJDK 中哪里可以找到使用 Launch4j 打包 JavaFX 应用程序所需的 JRE 文件
- ruby-on-rails - 如何使用 RSpec 测试 Sidekiq 工作人员?
- php - PHP调用函数进行输入
- ionic3 - 如何使用 Ionic 3 修复图像滚动缓慢/断断续续的问题?
- python - 当任何表或行更新时,mssql 有什么方法可以通知我的 python 应用程序?
- javascript - JavaScript 正则表达式仅验证 URL 中的路径参数
- javascript - 如何使用 jQuery 或 CSS 设置提交按钮第一个单词的样式
- python - 在 Python 3.6 中从 URL 下载数据
- c# - 如何停止将两个相同的 ID 添加到列表中?(C# 多线程)
- c# - 脱钩问题 - 改进和替代方案