Dynamic field mapping
When Elasticsearch detects a new field in a document, it dynamically adds the field to the type mapping by default. The dynamic parameter controls this behavior.
You can explicitly instruct Elasticsearch to dynamically create fields based on incoming documents by setting the dynamic parameter to true or runtime. When dynamic field mapping is enabled, Elasticsearch uses the rules in the following table to determine how to map data types for each field.
The field data types in the following table are the only field data types that Elasticsearch detects dynamically. You must explicitly map all other data types.
Elasticsearch data type | ||
JSON data type |
|
|
| No field added | No field added |
|
|
|
|
|
|
|
|
|
|
| No field added |
| Depends on the first non- | Depends on the first non- |
|
|
|
|
|
|
|
|
|
You can disable dynamic mapping, both at the document and at the object level. Setting the dynamic parameter to false ignores new fields, and strict rejects the document if Elasticsearch encounters an unknown field.
Use the update mapping API to update the dynamic setting on existing fields.
You can customize dynamic field mapping rules for date detection and numeric detection. To define custom mappings rules that you can apply to additional dynamic fields, use dynamic_templates.
Date detection
If date_detection is enabled (default), then new string fields are checked to see whether their contents match any of the date patterns specified in dynamic_date_formats. If a match is found, a new date field is added with the corresponding format.
The default value for dynamic_date_formats is:
[ "strict_date_optional_time","yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"]
For example:
PUT my-index-000001/_doc/1
{
"create_date": "2015/09/02"
}
GET my-index-000001/_mapping | The |
Disabling date detection
Dynamic date detection can be disabled by setting date_detection to false:
PUT my-index-000001
{
"mappings": {
"date_detection": false
}
}
PUT my-index-000001/_doc/1
{
"create_date": "2015/09/02"
} | The |
Customizing detected date formats
Alternatively, the dynamic_date_formats can be customized to support your own date formats:
PUT my-index-000001
{
"mappings": {
"dynamic_date_formats": ["MM/dd/yyyy"]
}
}
PUT my-index-000001/_doc/1
{
"create_date": "09/25/2015"
} Numeric detection
While JSON has support for native floating point and integer data types, some applications or languages may sometimes render numbers as strings. Usually the correct solution is to map these fields explicitly, but numeric detection (which is disabled by default) can be enabled to do this automatically:
PUT my-index-000001
{
"mappings": {
"numeric_detection": true
}
}
PUT my-index-000001/_doc/1
{
"my_float": "1.0",
"my_integer": "1"
}
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/dynamic-field-mapping.html