ElastaticSearch -- es之Filters aggregation 先过滤再聚合
使用场景
使用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"
}
}
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了