Exists Query(非空值查询)

原文链接 : https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html

译文链接 : http://www.apache.wiki/pages/viewpage.action?pageId=4260628

贡献者 : @小布丁

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

  1. GET /_search
  2. {
  3. "query": {
  4. "exists" : { "field" : "user" }
  5. }
  6. }

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

  1. { "user": "jane" }
  2. { "user": "" }
  3. { "user": "-" }
  4. { "user": ["jane"] }
  5. { "user": ["jane", null ] }

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

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

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

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

  1. { "user": null }
  2. { "user": [] }
  3. { "user": [null] }
  4. { "foo": "bar" }

①这个字段没有任何值。

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

③ user 字段完全丢失。

null_value mapping (非空值映射)

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

例如:user 字段映射如下:

  1. "user": {
  2. "type": "text",
  3. "null_value": "_null_"
  4. }

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

  1. { "user": null }
  2. { "user": [null] }

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

  1. { "user": [] }
  2. { "foo": "bar" }

missing query (缺失查询)

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

  1. GET /_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must_not": {
  6. "exists": {
  7. "field": "user"
  8. }
  9. }
  10. }
  11. }
  12. }

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