多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Exists Query(非空值查询) 原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html) 译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=4260628](http://www.apache.wiki/pages/viewpage.action?pageId=4260628) 贡献者 : @小布丁 返回在原始字段中至少有一个非空值的文档: ``` 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**](https://www.elastic.co/guide/en/elasticsearch/reference/current/null-value.html) (空值)设置,那么明确的 **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 字段中没有值的文档。