使用場景
使用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"
}
}
}
}
}
}