Exists Query(非空值查询)

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

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 字段中没有值的文档。