能否将多个Filters聚合合并为子聚合?Elasticsearch技术咨询
合并Elasticsearch多个Filters聚合的解决方案
你可以直接把两个过滤条件整合到同一个filters聚合中,这样就能在单个聚合下同时得到foo和bar的匹配统计结果,完全不需要用到Composite聚合。
调整后的请求示例如下:
GET /test_index_search { "aggregations": { "combinedAggregation": { "filters": { "filters": { "mu-custom-foo-agg": { "bool": { // 原foo匹配的布尔查询 } }, "mu-custom-bar-agg": { "bool": { // 原bar匹配的布尔查询 } } } } } } }
这个方案的效果和你原来两个独立聚合的结果完全一致,只是把两个统计结果整合到了combinedAggregation这个父聚合下,每个过滤条件对应一个子桶,操作起来更集中便利。
如果你的场景还需要在这些过滤桶之上做进一步的子聚合,也可以直接在filters聚合下添加aggs字段嵌套其他聚合逻辑,比如:
GET /test_index_search { "aggregations": { "combinedAggregation": { "filters": { "filters": { "mu-custom-foo-agg": { "bool": { // 原foo匹配的布尔查询 } }, "mu-custom-bar-agg": { "bool": { // 原bar匹配的布尔查询 } } } }, "aggs": { // 这里可以添加针对每个过滤桶的子聚合,比如统计某个字段的平均值等 "avg_price": { "avg": { "field": "price" } } } } } }
这样既实现了合并聚合的需求,也保留了后续扩展子聚合的灵活性。
内容的提问来源于stack exchange,提问作者darth jemico
相关产品推荐
相关产品推荐

