Exists 查询(非空值查询)

返回在原始字段中至少有一个非空值的文档:

GET /_search
{
    "query": {
        "exists" : { "field" : "user" }
    }
}

例如,这些文档都将匹配上面的查询:

{ "user": "jane" }
{ "user": "" } ①
{ "user": "-" } ②
{ "user": ["jane"] }
{ "user": ["jane", null ] } ③

①空字符串是non-null(非空值)。

②即使通过standard analyzer标准分析器也不会发出警告,原始字段也是非空的。

③至少需要一个non-null非空值。

这些文档将不会被上面的查询匹配到:

{ "user": null }
{ "user": [] } ①
{ "user": [null] } ②
{ "foo":  "bar" } ③

①这个字段没有任何值。

②至少需要一个 non-null 非空值。

③ user 字段完全丢失。

null_value mapping (非空值映射)

如果字段映射包括null_value(空值)设置,那么明确的null(空对象)将替换为指定的null_value(空值)。

例如:user 字段映射如下:

"user": {
  "type": "text",
  "null_value": "_null_"
}

那么明确的null(空对象)将被索引为字符串 “_null_” ,并且以下文档将被exists (非空值)筛选器匹配:

{ "user": null }
{ "user": [null] }

但是,这些文档没有明确的null(空对象)值,在 user 字段中也没有值,并且将不能被 exists (非空值)筛选器匹配:

{ "user": [] }
{ "foo": "bar" }

missing query (缺失查询)

missing query(缺失查询)已被废弃,因为它可以方便的由must_not子句中的exists查询替换,如下所示:

GET /_search
{
    "query": {
        "bool": {
            "must_not": {
                "exists": {
                    "field": "user"
                }
            }
        }
    }
}

此查询返回在 user 字段中没有值的文档。

Last updated