在对象数组中查找具有至少一个空值的文档

时间:2019-04-26 08:53:55

标签: elasticsearch

我们的数据结构如下

{
    "foo": "bar",
    "baz": [
        {
            "qux": true
        },
        {
            "qux": null
        },
        {
            "qux": false
        }
    ]
}

在其他文档中,baz数组中的项目数可能会有所不同。

我们正在寻找null数组中qux至少具有一个baz值的文档。

我们尝试过:

{
    "query": {
        "bool": {
            "must_not": {
                "exists": {
                    "field": "baz.qux"
                }
            }
        }
    }
}

但是,这不会返回包含以下内容的文档: true数组中null的一个qux和一个baz的值。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

您可以使用缺少的查询来简单地检查字段是否为空。

{
    "query" : {
        "constant_score" : {
            "filter": {
                "missing" : { "field" : "baz.qux" }
            }
        }
    }
}

您也可以在以下链接上查看弹性文件:

文档:Is null Query

答案 1 :(得分:0)

您可以使用nested mappingnested query来实现。

映射:

{
    "properties": {
        "foo": {
            "type": "text"
        },
        "baz": {
            "type": "nested",
            "properties": {
                "qux": {
                    "type": "boolean"
                }
            }
        }
    }
}

查询:

{
    "query": {
        "nested": {
            "path": "baz",
            "query": {
                "bool": {
                    "must_not": {
                        "exists": {
                            "field": "baz.qux"
                        }
                    }
                }
            }
        }
    }
}