elasticsearch查询术语值或空多级

pqwbnv8z  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(0)|浏览(284)

假设我们有如下文件:

{
    "name" : "Company A",
    "country" : "UK",
    "branches" : [
        {
            "code" : "BA1",
            "type" : "VIRTUAL",
            "employees" : [
                {
                    "name" : "Ben",
                    "role" : "Developer"
                }, 
                ...
            ]
        },
        ...
    ]
}

我不想构建一个查询来过滤在某个字段中提供了某些值或该字段丢失(或空)的公司。e、 g.案例:
筛选位于美国或国家的所有公司为空。
筛选至少有一个分支机构为虚拟或类型为空的所有公司。
筛选至少有一个分支机构且至少有一名员工的角色为“开发人员”或“角色为空”的所有公司。
我试着用一些通用的查询来结束它,以便能够在任何路径上重用它。如果我没有包含缺失值的要求,那么泛型查询很简单,例如对于第三种情况:

{
    "query": {
        "bool": {
            "should": [
                {
                    "term": {
                        "branches.employees.role": {
                            "value": "Developer"
                        }
                    }
                }
            ]
        }
    }
}

但显然elasticsearch无法搜索空值。在文档中,建议的解决方案是将must\u与exists一起使用,这对于根级别的字段非常有效,例如对于第一种情况:

{
    "query": {
        "bool": {
            "should": [
                {
                    "term": {
                        "country": {
                            "value": "USA"
                        }
                    }
                }, 
                {
                    "bool": {
                        "must_not": [
                            {
                                "exists": {
                                    "field": "country"
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

这对案例2和案例3不起作用,这是有意义的,例如,对于案例2,如果公司有两个分支机构,一个是实体分支机构,另一个是未知分支机构,exists将返回true。是否有任何方法可以搜索缺少的值,特别是在数组中搜索至少一个缺少的值。在我的例子中,我也不能使用嵌套查询。有什么选择吗?
谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题