小编adr*_*ois的帖子

如何过滤elasticsearch全局聚合?

我想要实现的目标:我希望我的"年龄"聚合不被查询过滤器过滤,我希望能够对其应用过滤器.

所以,如果我从这个查询开始:

{
    "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"
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的聚合"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"
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是弹性搜索会抱怨我的filter_2:

msgstr"""在[global]和[filter]中找到了两个聚合类型定义[age]"""

当然,如果我删除filter_2:

{
    "query":{
        "filtered":{
            "filter":{
                "terms":{
                    "family_name":"Brown"
                }
            }
        } …
Run Code Online (Sandbox Code Playgroud)

aggregation elasticsearch

11
推荐指数
1
解决办法
7486
查看次数

标签 统计

aggregation ×1

elasticsearch ×1