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);
添加回答
舉報