WARNING: Version 1.5 of Elasticsearch has passed its EOL date.
This documentation is no longer being maintained and may be removed. If you are running this version, we strongly advise you to upgrade. For the latest information, see the current release documentation.
Dynamic Mapping
editDynamic Mapping
editDefault mappings allow generic mapping definitions to be automatically applied to types that do not have mappings predefined. This is mainly done thanks to the fact that the object mapping and namely the root object mapping allow for schema-less dynamic addition of unmapped fields.
The default mapping definition is a plain mapping definition that is embedded within the distribution:
{ "_default_" : { } }
Pretty short, isn’t it? Basically, everything is defaulted, especially the
dynamic nature of the root object mapping. The default mapping
definition can be overridden in several manners. The simplest manner is
to simply define a file called default-mapping.json
and to place it
under the config
directory (which can be configured to exist in a
different location). It can also be explicitly set using the
index.mapper.default_mapping_location
setting.
The dynamic creation of mappings for unmapped types can be completely
disabled by setting index.mapper.dynamic
to false
.
The dynamic creation of fields within a type can be completely
disabled by setting the dynamic
property of the type to strict
.
Here is a Put Mapping example that
disables dynamic field creation for a tweet
:
$ curl -XPUT 'http://localhost:9200/twitter/_mapping/tweet' -d ' { "tweet" : { "dynamic": "strict", "properties" : { "message" : {"type" : "string", "store" : true } } } } '
Here is how we can change the default date_formats used in the root and inner object types:
{ "_default_" : { "dynamic_date_formats" : ["yyyy-MM-dd", "dd-MM-yyyy", "date_optional_time"] } }
Unmapped fields in queries
editQueries and filters can refer to fields that don’t exist in a mapping. Whether this
is allowed is controlled by the index.query.parse.allow_unmapped_fields
setting.
This setting defaults to true
. Setting it to false
will disallow the usage of
unmapped fields in queries.
When registering a new percolator query or creating
a filtered alias then the index.query.parse.allow_unmapped_fields
setting
is forcefully overwritten to disallowed unmapped fields.