Put mapping APIedit
Adds new fields to an existing index or changes the search settings of existing fields.
PUT /twitter/_mapping { "properties": { "email": { "type": "keyword" } } }
Before 7.0.0, the mappings definition used to include a type name.
Although specifying types in requests is now deprecated, a type can still be
provided if the request parameter include_type_name
is set. For more details,
please see Removal of mapping types.
Path parametersedit
-
<index>
-
(Optional, string) Comma-separated list or wildcard expression of index names used to limit the request.
To update the mapping of all indices, omit this parameter or use a value of
_all
.
Query parametersedit
-
allow_no_indices
-
(Optional, boolean) If
true
, the request does not return an error if a wildcard expression or_all
value retrieves only missing or closed indices.This parameter also applies to index aliases that point to a missing or closed index.
Defaults to
false
. -
expand_wildcards
-
(Optional, string) Controls what kind of indices that wildcard expressions can expand to. Multiple values are accepted when separated by a comma, as in
open,hidden
. Valid values are:-
all
- Expand to open and closed indices, including hidden indices.
-
open
- Expand only to open indices.
-
closed
- Expand only to closed indices.
-
hidden
-
Expansion of wildcards will include hidden indices.
Must be combined with
open
,closed
, or both. -
none
- Wildcard expressions are not accepted.
Defaults to
open
. -
-
include_type_name
-
[7.0.0]
Deprecated in 7.0.0. Mapping types have been deprecated. See Removal of mapping types.
(Optional, boolean) If
true
, a mapping type is expected in the body of mappings. Defaults tofalse
. -
ignore_unavailable
-
(Optional, boolean) If
true
, missing or closed indices are not included in the response. Defaults tofalse
. -
master_timeout
-
(Optional, time units) Specifies the period of time to wait for
a connection to the master node. If no response is received before the timeout
expires, the request fails and returns an error. Defaults to
30s
. -
timeout
-
(Optional, time units) Specifies the period of time to wait for
a response. If no response is received before the timeout expires, the request
fails and returns an error. Defaults to
30s
.
Request bodyedit
-
properties
-
(Required, mapping object) Mapping for a field. For new fields, this mapping can include:
- Field name
- Field datatype
- Mapping parameters
For existing fields, see Change the mapping of an existing field.
Examplesedit
Example with index setupedit
The put mapping API requires an existing index. The following
create index API request creates the publications
index with no mapping.
PUT /publications
The following put mapping API request adds title
, a new text
field,
to the publications
index.
PUT /publications/_mapping { "properties": { "title": { "type": "text"} } }
Multiple indicesedit
The PUT mapping API can be applied to multiple indices with a single request.
For example, we can update the twitter-1
and twitter-2
mappings at the same time:
# Create the two indices PUT /twitter-1 PUT /twitter-2 # Update both mappings PUT /twitter-1,twitter-2/_mapping { "properties": { "user_name": { "type": "text" } } }
Note that the indices specified ( |
Add new properties to an existing object fieldedit
You can use the put mapping API
to add new properties
to an existing object
field.
To see how this works,
try the following example.
Use the create index API
to create an index
with the name
object field
and an inner first
text field.
PUT /my_index { "mappings": { "properties": { "name": { "properties": { "first": { "type": "text" } } } } } }
Use the put mapping API
to add a new inner last
text field
to the name
field.
PUT /my_index/_mapping { "properties": { "name": { "properties": { "last": { "type": "text" } } } } }
Use the get mapping API to verify your changes.
GET /my_index/_mapping
The API returns the following response:
{ "my_index" : { "mappings" : { "properties" : { "name" : { "properties" : { "first" : { "type" : "text" }, "last" : { "type" : "text" } } } } } } }
Add multi-fields to an existing fieldedit
Multi-fields
let you index the same field
in different ways.
You can use the put mapping API
to update the fields
mapping parameter
and enable multi-fields for an existing field.
To see how this works, try the following example.
Use the create index API
to create an index
with the city
text field.
PUT /my_index { "mappings": { "properties": { "city": { "type": "text" } } } }
While text fields work well for full-text search, keyword fields are not analyzed and may work better for sorting or aggregations.
Use the put mapping API
to enable a multi-field for the city
field.
This request adds the city.raw
keyword multi-field,
which can be used for sorting.
PUT /my_index/_mapping { "properties": { "city": { "type": "text", "fields": { "raw": { "type": "keyword" } } } } }
Use the get mapping API to verify your changes.
GET /my_index/_mapping
The API returns the following response:
{ "my_index" : { "mappings" : { "properties" : { "city" : { "type" : "text", "fields" : { "raw" : { "type" : "keyword" } } } } } } }
Change supported mapping parameters for an existing fieldedit
The documentation for each mapping parameter
indicates whether you can update it
for an existing field
using the put mapping API.
For example,
you can use the put mapping API
to update the ignore_above
parameter.
To see how this works, try the following example.
Use the create index API to create an index
containing a user_id
keyword field.
The user_id
field
has an ignore_above
parameter value
of 20
.
PUT /my_index { "mappings": { "properties": { "user_id": { "type": "keyword", "ignore_above": 20 } } } }
Use the put mapping API
to change the ignore_above
parameter value
to 100
.
PUT /my_index/_mapping { "properties": { "user_id": { "type": "keyword", "ignore_above": 100 } } }
Use the get mapping API to verify your changes.
GET /my_index/_mapping
The API returns the following response:
{ "my_index" : { "mappings" : { "properties" : { "user_id" : { "type" : "keyword", "ignore_above" : 100 } } } } }
Change the mapping of an existing fieldedit
Except for supported mapping parameters, you can’t change the mapping or field type of an existing field. Changing an existing field could invalidate data that’s already indexed.
If you need to change the mapping of a field, create a new index with the correct mapping and reindex your data into that index.
To see how this works, try the following example.
Use the create index API
to create the users
index
with the user_id
field
with the long
field type.
PUT /users { "mappings" : { "properties": { "user_id": { "type": "long" } } } }
Use the index API
to index several documents
with user_id
field values.
POST /users/_doc?refresh=wait_for { "user_id" : 12345 } POST /users/_doc?refresh=wait_for { "user_id" : 12346 }
To change the user_id
field
to the keyword
field type,
use the create index API
to create the new_users
index with the correct mapping.
PUT /new_users { "mappings" : { "properties": { "user_id": { "type": "keyword" } } } }
Use the reindex API
to copy documents from the users
index
to the new_users
index.
POST /_reindex { "source": { "index": "users" }, "dest": { "index": "new_users" } }
The API returns the following response:
{ "took": 147, "timed_out": false, "total": 2, "updated": 0, "created": 2, "deleted": 0, "batches": 1, "version_conflicts": 0, "noops": 0, "retries": { "bulk": 0, "search": 0 }, "throttled_millis": 0, "requests_per_second": -1.0, "throttled_until_millis": 0, "failures" : [ ] }
Rename a fieldedit
Renaming a field would invalidate data already indexed under the old field name.
Instead, add an alias
field to create an alternate field name.
For example,
use the create index API
to create an index
with the user_identifier
field.
PUT /my_index { "mappings": { "properties": { "user_identifier": { "type": "keyword" } } } }
Use the put mapping API to add the user_id
field alias
for the existing user_identifier
field.
PUT /my_index/_mapping { "properties": { "user_id": { "type": "alias", "path": "user_identifier" } } }
Use the get mapping API to verify your changes.
GET /my_index/_mapping
The API returns the following response:
{ "my_index" : { "mappings" : { "properties" : { "user_id" : { "type" : "alias", "path" : "user_identifier" }, "user_identifier" : { "type" : "keyword" } } } } }