gpt4 book ai didi

java - Elasticsearch 按字段聚合和求和(group by)

转载 作者:行者123 更新时间:2023-12-02 11:19:26 28 4
gpt4 key购买 nike

我的索引中有下一个数据:

{
"category": "fruit",
"name": "apple",
"price": 2.6,
},
{
"category": "fruit",
"name": "orange",
"price": 1.8,
},
{
"category": "vegs",
"name": "tomato",
"price": 0.95,
}

我想按类别对价格进行求和,得到如下结果:

fruit - 4.4
vegs - 0.95

我确实意识到我需要使用嵌套聚合,但我不知 Prop 体如何使用。这是我到目前为止得到的代码:

    SearchRequest searchRequest = new SearchRequest("products");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

searchSourceBuilder.
aggregation(AggregationBuilders.
nested("category_price", "products").
subAggregation(
AggregationBuilders
.terms("field").field("category")).
subAggregation(
AggregationBuilders.avg("avg_price").field("price"))
);

searchRequest.source(searchSourceBuilder);

SearchResponse response = client.search(searchRequest);
Nested agg = response.getAggregations().get("category_price");

Terms name = agg.getAggregations().get("field");
for (Terms.Bucket bucket : name.getBuckets()) {
ReverseNested resellerToProduct = bucket.getAggregations().get("avg_price");
System.out.println(resellerToProduct.getDocCount());
System.out.println(resellerToProduct.getName());
}

最佳答案

您创建了第二个聚合作为同级聚合,您只需要子聚合。+你不必在这里使用嵌套聚合。

AggregationBuilder aggregationBuilder = AggregationBuilders.global("agg")
.subAggregation(AggregationBuilders.terms("by_category").field("category")
.subAggregation(AggregationBuilders.sum("sum_price").field("price")));

关于java - Elasticsearch 按字段聚合和求和(group by),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50038284/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com