我的索引中有下一个数据:
{
"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
我确实意识到我需要使用嵌套聚合,但我看不清楚。这是我到目前为止的代码:
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());
}
答案 0 :(得分:1)
您创建了第二个聚合作为兄弟,您只需要子聚合。 +你不必在这里使用嵌套聚合。
import { Injectable } from '@angular/core';
import {Subject} from 'rxjs/Subject';
@Injectable()
export class CommonSvc{
public mySub = new Subject<number>();
public counter: number = 0;
increaseCounter(){
this.counter++;
this.mySub.next(this.counter);
}
}