我正在尝试为存储桶排序聚合实现分页。 我有这个工作查询:

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) 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!