我想要实现的目标:我希望我的“年龄”聚合不会受到查询过滤器的影响,并且我希望能够对其应用筛选器。
因此,如果我从这个查询开始:
{
"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"
}
}
}
}
}
}
但是,Elasticsearch对我的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呢?或者说我该如何实现这一目标呢?我记得之前使用面向文档的筛选器时写过类似的东西...