弹性查询其中字段弹性为空

时间:2017-01-19 12:46:27

标签: python elasticsearch

我正在尝试编写一个查询,它在弹性中搜索特定字段为null。这个查询我们使用Python Elasticsearch Client在python中执行。

查询:

{
    "_source": ["name"],
    "query": {
                "nested": {
                    "path": "experience",
                    "query": {
                        "match": {
                            "experience.resignation_date": {
                                "query": None
                            }
                        }
                    }
                }
            }
}

因为它的python我在查询部分使用了None,但它给我这个错误。

elasticsearch.exceptions.RequestError: TransportError(400, 'parsing_exception', '[match] unknown token [VALUE_NULL] after [query]')

2 个答案:

答案 0 :(得分:3)

{@ 1}}查询已被弃用,您正在寻找bool/must_not + exists

missing

答案 1 :(得分:1)

使用此表达式,您不是要查询null,而是说使用null作为查询。

查询必须始终是ElasticSearch定义的查询类型之一,例如“匹配”查询。

你想在这里写的语法是

query: {
    match: {
        "experience.resignation_date": None
    }
}

您断言该值与“无”匹配

但是,有一个更好的特定查询类型,用于匹配名为“missing”的空字段值的文档。

它将匹配空字段以及缺少属性的文档。这是否更适合您取决于您​​的需求。

编辑:正如后续回答指出“失踪”现在实际上已被弃用。相当于取而代之的是“存在”查询。

query: {
    bool: {
        must_not: {
            exists: "experience.resignation_date"
        }
    }
}