做网站的必要广告推广
使用场景
使用es时,有时我们需要先过滤后再聚合,但如果直接在query的filter中过滤,不止会影响到一个聚合,还会影响到其他的聚合结果。
比如,我们想要统计深圳市某个品牌的总销售额,以及该品牌的女款衣服的销售额。
直接filter过滤款式为女,那么就无法统计总销售额了。
这时可以使用Filters aggregation。也就是在aggregations中先过滤后再聚合。
Filters aggregation格式
{"size" : 0,"aggregations" : {"自已命名的聚合名称1" : {"filter" : {"bool" : {"filter" : [{"term" : {"查询字段1" : {"value" : 查询值1,"boost" : 1.0}}}]}},"aggregations" : {"自已命名的聚合名称2" : {"sum" : {"field" : "查询值2"}}}}}
}
示例如下:
{"size" : 0,"query" : {"bool" : {"filter" : ["term" : {"area" : {"value" : "深圳市","boost" : 1.0}}]}},"aggregations" : {"filterAggGirl" : {"filter" : {"bool" : {"filter" : [{"term" : {"type" : {"value" : "女","boost" : 1.0}}}]}},"aggregations" : {"aggAmount" : {"sum" : {"field" : "amount"}}}}}
}
参考资料:
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/search-aggregations-bucket-filters-aggregation.html