WARNING: Version 2.3 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.
Put Mapping
editPut Mapping
editThe PUT mapping API allows you to provide type mappings while creating a new index, add a new type to an existing index, or add new fields to an existing type:
PUT twitter { "mappings": { "tweet": { "properties": { "message": { "type": "string" } } } } } PUT twitter/_mapping/user { "properties": { "name": { "type": "string" } } } PUT twitter/_mapping/tweet { "properties": { "user_name": { "type": "string" } } }
Creates an index called |
|
Uses the PUT mapping API to add a new mapping type called |
|
Uses the PUT mapping API to add a new field called |
More information on how to define type mappings can be found in the mapping section.
Multi-index
editThe PUT mapping API can be applied to multiple indices with a single request. It has the following format:
PUT /{index}/_mapping/{type} { body }
-
{index}
accepts multiple index names and wildcards. -
{type}
is the name of the type to update. -
{body}
contains the mapping changes that should be applied.
Updating field mappings
editIn general, the mapping for existing fields cannot be updated. There are some exceptions to this rule. For instance:
-
new
properties
can be added to Object datatype fields. - new multi-fields can be added to existing fields.
-
doc_values
can be disabled, but not enabled. -
the
ignore_above
parameter can be updated.
For example:
PUT my_index { "mappings": { "user": { "properties": { "name": { "properties": { "first": { "type": "string" } } }, "user_id": { "type": "string", "index": "not_analyzed" } } } } } PUT my_index/_mapping/user { "properties": { "name": { "properties": { "last": { "type": "string" } } }, "user_id": { "type": "string", "index": "not_analyzed", "ignore_above": 100 } } }
Create an index with a |
|
Add a |
|
Update the |
Each mapping parameter specifies whether or not its setting can be updated on an existing field.
Conflicts between fields in different types
editFields in the same index with the same name in two different types must have
the same mapping, as they are backed by the same field internally. Trying to
update a mapping parameter for a field which
exists in more than one type will throw an exception, unless you specify the
update_all_types
parameter, in which case it will update that parameter
across all fields with the same name in the same index.
The only parameters which are exempt from this rule — they can be set to different values on each field — can be found in Fields are shared across mapping types.
For example:
PUT my_index { "mappings": { "type_one": { "properties": { "text": { "type": "string", "analyzer": "standard" } } }, "type_two": { "properties": { "text": { "type": "string", "analyzer": "standard" } } } } } PUT my_index/_mapping/type_one { "properties": { "text": { "type": "string", "analyzer": "standard", "search_analyzer": "whitespace" } } } PUT my_index/_mapping/type_one?update_all_types { "properties": { "text": { "type": "string", "analyzer": "standard", "search_analyzer": "whitespace" } } }