[[query-dsl-exists-query]] === Exists Query Returns documents that have at least one non-`null` value in the original field: [source,js] -------------------------------------------------- GET /_search { "query": { "exists" : { "field" : "user" } } } -------------------------------------------------- // CONSOLE For instance, these documents would all match the above query: [source,js] -------------------------------------------------- { "user": "jane" } { "user": "" } <1> { "user": "-" } <2> { "user": ["jane"] } { "user": ["jane", null ] } <3> -------------------------------------------------- // NOTCONSOLE <1> An empty string is a non-`null` value. <2> Even though the `standard` analyzer would emit zero tokens, the original field is non-`null`. <3> At least one non-`null` value is required. These documents would *not* match the above query: [source,js] -------------------------------------------------- { "user": null } { "user": [] } <1> { "user": [null] } <2> { "foo": "bar" } <3> -------------------------------------------------- // NOTCONSOLE <1> This field has no values. <2> At least one non-`null` value is required. <3> The `user` field is missing completely. [float] ==== `null_value` mapping If the field mapping includes the <> setting then explicit `null` values are replaced with the specified `null_value`. For instance, if the `user` field were mapped as follows: [source,js] -------------------------------------------------- PUT /example?include_type_name=true { "mappings": { "_doc": { "properties": { "user": { "type": "keyword", "null_value": "_null_" } } } } } -------------------------------------------------- // CONSOLE then explicit `null` values would be indexed as the string `_null_`, and the following docs would match the `exists` filter: [source,js] -------------------------------------------------- { "user": null } { "user": [null] } -------------------------------------------------- // NOTCONSOLE However, these docs--without explicit `null` values--would still have no values in the `user` field and thus would not match the `exists` filter: [source,js] -------------------------------------------------- { "user": [] } { "foo": "bar" } -------------------------------------------------- // NOTCONSOLE ==== `missing` query There isn't a `missing` query. Instead use the `exists` query inside a `must_not` clause as follows: [source,js] -------------------------------------------------- GET /_search { "query": { "bool": { "must_not": { "exists": { "field": "user" } } } } } -------------------------------------------------- // CONSOLE This query returns documents that have no value in the user field.