2 回答
TA贡献1816条经验 获得超4个赞
我希望我答对了你的问题。尝试将“订单”添加到您的 groupBy agg:
AggregationBuilder groupBy = AggregationBuilders.terms("by_customer").field("customer_id").subAggregation(sum).order(Terms.Order.aggregation("sum_total", false));
还有一件事,如果您想要前 3 个客户,那么您也.size(3)
应该在 groupBy agg 上设置而不是在排序上。像那样:AggregationBuilder groupBy = AggregationBuilders.terms("by_customer").field("customer_id").subAggregation(sum).order(Terms.Order.aggregation("sum_total", false)).size(3);
TA贡献2041条经验 获得超4个赞
正如另一个答案所提到的,“订单”确实适用于您的用例。
然而,还有其他用例可能需要使用 bucket_sort。例如,如果有人想要分页浏览聚合存储桶。
由于 bucket_sort 是一个管道聚合,您不能使用 AggregationBuilders 来实例化它。相反,您需要使用 PipelineAggregatorBuilders。
您可以在此处阅读有关存储桶排序/管道聚合的更多信息。
以下代码中的“.from(50)”是如何分页浏览存储桶的示例。如果适用,这会导致存储桶中的项目从项目 50 开始。不包括“from”相当于“.from(0)”
BucketSortPipelineAggregationBuilder paging = PipelineAggregatorBuilders.bucketSort(
"paging", List.of(new FieldSortBuilder("sum_total").order(SortOrder.DESC))).from(50).size(10);
AggregationBuilders.terms("by_customer").field("customer_id").subAggregation(sum).subAggregation(paging);
添加回答
举报