Missing Query

edit

Deprecated in 2.2.0.

Use exists query inside a must_not clause instead

Returns documents that have only null values or no value in the original field:

{
    "constant_score" : {
        "filter" : {
            "missing" : { "field" : "user" }
        }
    }
}

For instance, the following docs would match the above filter:

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

This field has no values.

This field has no non-null values.

The user field is missing completely.

These documents would not match the above filter:

{ "user": "jane" }
{ "user": "" } 
{ "user": "-" } 
{ "user": ["jane"] }
{ "user": ["jane", null ] } 

An empty string is a non-null value.

Even though the standard analyzer would emit zero tokens, the original field is non-null.

This field has one non-null value.

null_value mapping

edit

If the field mapping includes a null_value then explicit null values are replaced with the specified null_value. For instance, if the user field were mapped as follows:

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

then explicit null values would be indexed as the string _null_, and the the following docs would not match the missing filter:

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

However, these docs—​without explicit null values—​would still have no values in the user field and thus would match the missing filter:

{ "user": [] }
{ "foo": "bar" }
existence and null_value parameters
edit

When the field being queried has a null_value mapping, then the behaviour of the missing filter can be altered with the existence and null_value parameters:

{
    "constant_score" : {
        "filter" : {
            "missing" : {
                "field" : "user",
                "existence" : true,
                "null_value" : false
            }
        }
    }
}
existence

When the existence parameter is set to true (the default), the missing filter will include documents where the field has no values, ie:

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

When set to false, these documents will not be included.

null_value

When the null_value parameter is set to true, the missing filter will include documents where the field contains a null value, ie:

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

Matches because the field contains a null value, even though it also contains a non-null value.

When set to false (the default), these documents will not be included.

Either existence or null_value or both must be set to true.