我想要实现的目标:我希望我的“年龄”聚合不被查询过滤器过滤,并且我希望能够对其应用过滤器。
因此,如果我从这个查询开始:
{
"query":{
"filtered":{
"filter":{ "terms":{ "family_name":"Brown" } } //filter_1
}
},
"aggs":{
"young_age":{
"filter":{
"range":{ "lt":40, "gt":18 } //filter_2
},
"aggs":{
"age":{
"terms":{
"field":"age"
}
}
}
}
}
}
我的聚合“young_age”将被filter_1和filter_2过滤。我不希望我的聚合被filter_1 过滤。
当我查看文档时,我认为全局聚合可以解决我的问题,因此我编写了该查询:
{
"query":{
"filtered":{
"filter":{ "terms":{ "family_name":"Brown" } } //filter_1
}
},
"aggs":{
"young_age":{
"global":{}, //<----------- add global
"filter":{
"range":{ "lt":40, "gt":18 } //filter_2
},
"aggs":{
"age":{
"terms":{
"field":"age"
}
}
}
}
}
}
但随后弹性搜索抱怨我的filter_2:
”“”
在[global]和[filter]中发现两个聚合类型定义[age]
”“”
当然,如果我删除filter_2:
{
"query":{
"filtered":{
"filter":{
"terms":{
"family_name":"Brown"
}
}
}
},
"aggs":{
"young_age":{
"global":{},
"aggs":{
"age":{
"terms":{
"field":"age"
}
}
}
}
}
}
那么我的聚合将不会被 filter_1 过滤(如预期)。
那么我该如何将 filter_2 应用到我的全局聚合中呢?或者我应该如何实现这一目标?我记得用分面过滤器写过类似的东西......