Link Search Menu Expand Document Documentation Menu

Null value

The null_value mapping parameter allows you to replace explicit null values with a predefined substitute during indexing. By default, if a field is set to null, it is not indexed and cannot be searched. With null_value defined, the specified replacement value is indexed instead. This allows you to query or aggregate documents in which a field was originally null without modifying the document _source.

The null_value must be of the same type as the field it is applied to. For instance, a date field cannot use a boolean such as true as its null_value; the null_value must be a valid date string.

Setting a null_value on a field

The following request creates an index named products. The category field is of type keyword and replaces null values with "unknown" during indexing:

PUT /products
{
  "mappings": {
    "properties": {
      "category": {
        "type": "keyword",
        "null_value": "unknown"
      }
    }
  }
}

Indexing a document with a null value

Use the following command to index a document in which the category field is set to null:

PUT /products/_doc/1
{
  "category": null
}

Querying the null substitute

Use the following command to search for documents in which the category field was previously null:

POST /products/_search
{
  "query": {
    "term": {
      "category": "unknown"
    }
  }
}

The response contains the matching document:

{
  ...
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 0.2876821,
    "hits": [
      {
        "_index": "products",
        "_id": "1",
        "_score": 0.2876821,
        "_source": {
          "category": null
        }
      }
    ]
  }
}

Aggregating on a null substitute

Because the null replacement is indexed, it also appears in aggregations. Use the following command to perform a terms aggregation on the category field:

POST /products/_search
{
  "size": 0,
  "aggs": {
    "category_count": {
      "terms": {
        "field": "category"
      }
    }
  }
}

The response contains aggregated results:

{
  ...
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "category_count": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "unknown",
          "doc_count": 1
        }
      ]
    }
  }
}
350 characters left

Have a question? .

Want to contribute? or .