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"
}
}
}
}
}
}