【发布时间】:2019-04-09 19:38:41
【问题描述】:
我将 elasticsearch 与 java api 结合使用,并试图从每个术语聚合桶中获取最低记录的平均值。我找到的一种解决方案是得到这样的结果
AggregationBuilders.terms("group_by_flights").field("flight_id)
.subAggregation(AggregationBuilders.min("minimum").field("duration")))
然后在代码端计算平均值。问题是如果有很多结果,它会分配很多内存来计算它。我想在弹性方面做到这一点。 我发现,有类似 avg bucket pipeline 聚合之类的东西,它可以作为 sibling 聚合添加到术语(和其他)
"the average": {
"avg_bucket": {
"buckets_path": "some_bucket_path"
}
}
问题是,在 java api 中,您只能将管道聚合添加为 子聚合。因此,如果我们像这样构建我们的聚合,我们的术语聚合将不会被看到
AggregationBuilders.terms("group_by_flights").field("flight_id")
.subAggregation(PipelineAggregatorBuilders.avgBucket("avg", "group_by_flights.duration" *<- this wont't be seen because its subaggregation*))
我正在考虑制作一些空的顶级聚合,然后将所有聚合添加为子聚合,但这似乎很愚蠢,而且我没有正确理解某些东西。 有什么想法吗?
【问题讨论】:
标签: elasticsearch elasticsearch-aggregation elasticsearch-java-api