123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532 |
- [[data-streams-change-mappings-and-settings]]
- == Change mappings and settings of backing indices
- ++++
- <titleabbrev>Change mappings and settings</titleabbrev>
- ++++
- Each data stream has a <<create-a-data-stream-template,matching index
- template>>. Mappings and index settings from this template are applied to new
- backing indices created for the stream. This includes the stream's first
- backing index, which is auto-generated when the stream is created.
- Before creating a data stream, we recommend you carefully consider which
- mappings and settings to include in this template. However, if you later need to
- change the mappings or settings of a data stream's backing indices, you have a
- couple options:
- * To apply changes to future backing indices, simply update the index
- template used by the data stream. Mapping and setting changes will be
- automatically applied to any backing indices created after the update.
- +
- .*Example*
- [%collapsible]
- ====
- `logs_data_stream` is an existing index template used by the
- `logs` data stream.
- The following <<indices-templates,put index template API>> makes several
- changes to the `logs_data_stream` template:
- * It changes the `@timestamp` field mapping from the `date` field datatype to
- the `date_nanos` datatype.
- * It adds new `sort.field` and `sort.order` index settings.
- ////
- [source,console]
- ----
- PUT /_ilm/policy/logs_policy
- {
- "policy": {
- "phases": {
- "hot": {
- "actions": {
- "rollover": {
- "max_size": "25GB"
- }
- }
- },
- "delete": {
- "min_age": "30d",
- "actions": {
- "delete": {}
- }
- }
- }
- }
- }
- PUT /_index_template/logs_data_stream
- {
- "index_patterns": [ "logs*" ],
- "data_stream": {
- "timestamp_field": "@timestamp"
- },
- "template": {
- "mappings": {
- "properties": {
- "@timestamp": {
- "type": "date"
- }
- }
- },
- "settings": {
- "index.lifecycle.name": "logs_policy"
- }
- }
- }
- PUT /logs/_bulk?refresh
- {"create":{"_index" : "logs"}}
- { "@timestamp": "2020-12-08T11:04:05.000Z" }
- {"create":{"_index" : "logs"}}
- { "@timestamp": "2020-12-08T11:06:07.000Z" }
- {"create":{"_index" : "logs"}}
- { "@timestamp": "2020-12-09T11:07:08.000Z" }
- ----
- ////
- [source,console]
- ----
- PUT /_index_template/logs_data_stream
- {
- "index_patterns": [ "logs*" ],
- "data_stream": {
- "timestamp_field": "@timestamp"
- },
- "template": {
- "mappings": {
- "properties": {
- "@timestamp": {
- "type": "date_nanos" <1>
- }
- }
- },
- "settings": {
- "index.lifecycle.name": "logs_policy",
- "sort.field" : [ "@timestamp"], <2>
- "sort.order" : [ "desc"] <3>
- }
- }
- }
- ----
- // TEST[continued]
- <1> Changes the `@timestamp` field mapping to the `date_nanos` datatype.
- <2> Adds the `sort.field` index setting.
- <3> Adds the `sort.order` index setting.
- ====
- +
- If wanted, you can <<manually-roll-over-a-data-stream,roll over the data
- stream>> to immediately apply the new mappings and settings to the data stream's
- write index. This affects any new data added to the stream after the rollover.
- +
- .*Example*
- [%collapsible]
- ====
- The following <<indices-rollover-index,rollover API>> request rolls over the
- `logs` data stream. This creates a new write index with mappings and index
- settings from the recently updated `logs_data_stream` template.
- [source,console]
- ----
- POST /logs/_rollover/
- ----
- // TEST[continued]
- ====
- +
- IMPORTANT: You cannot use these methods to change the mapping of a data stream's
- <<create-a-data-stream-template,timestamp field>>. To change the timestamp
- field's mapping, you must reindex the data stream. See
- <<data-streams-use-reindex-to-change-mappings-settings>>.
- * To apply mapping and setting changes to all existing backing indices and
- future ones, you must create a new data stream and reindex your data into it.
- See <<data-streams-use-reindex-to-change-mappings-settings>>.
- [discrete]
- [[data-streams-use-reindex-to-change-mappings-settings]]
- === Use reindex to change mappings or settings
- To change the mappings or settings for every backing index in a data stream, you
- must first create or update an index template so that it contains the
- changes. You can then reindex the existing data stream into a new one matching
- the template. This applies the mapping and setting changes in the template
- to each document and backing index of the data stream destination. These changes
- also affect any future backing index created by the new stream.
- Follow these steps:
- . Choose a name or wildcard (`*`) pattern for a new data stream. This new data
- stream will contain data from your existing stream.
- +
- You can use the resolve index API to check if the name or pattern matches any
- existing indices, index aliases, or data streams. If so, you should consider
- using another name or pattern.
- +
- .*Example*
- [%collapsible]
- ====
- The following resolve index API request checks for any existing indices, index
- aliases, or data streams that start with `new_logs`. If not, the `new_logs*`
- wildcard pattern can be used to create a new data stream.
- [source,console]
- ----
- GET /_resolve/index/new_logs*
- ----
- // TEST[continued]
- The API returns the following response, indicating no existing targets match
- this pattern.
- [source,console-result]
- ----
- {
- "indices" : [ ],
- "aliases" : [ ],
- "data_streams" : [ ]
- }
- ----
- ====
- . Create or update an index template. This template should contain the
- mappings and settings you'd like to apply to the new data stream's backing
- indices.
- +
- This index template must meet the
- <<create-a-data-stream-template,requirements for a data stream template>>. It
- should also contain your previously chosen name or wildcard pattern in the
- `index_patterns` property.
- +
- TIP: If you are only adding or changing a few things, we recommend you create a
- new template by copying an existing one and modifying it as needed.
- +
- .*Example*
- [%collapsible]
- ====
- `logs_data_stream` is an existing index template used by the
- `logs` data stream.
- The following <<indices-templates,put index template API>> request creates
- a new index template, `new_logs_data_stream`. `new_logs_data_stream`
- uses the `logs_data_stream` template as its basis, with the following changes:
- * The `index_patterns` wildcard pattern matches any index or data stream
- starting with `new_logs`.
- * The `@timestamp` field mapping uses the `date_nanos` field datatype rather
- than the `date` datatype.
- * The template includes `sort.field` and `sort.order` index settings, which were
- not in the original `logs_data_stream` template.
- [source,console]
- ----
- PUT /_index_template/new_logs_data_stream
- {
- "index_patterns": [ "new_logs*" ],
- "data_stream": {
- "timestamp_field": "@timestamp"
- },
- "template": {
- "mappings": {
- "properties": {
- "@timestamp": {
- "type": "date_nanos" <1>
- }
- }
- },
- "settings": {
- "index.lifecycle.name": "logs_policy",
- "sort.field" : [ "@timestamp"], <2>
- "sort.order" : [ "desc"] <3>
- }
- }
- }
- ----
- // TEST[continued]
- <1> Changes the `@timestamp` field mapping to the `date_nanos` field datatype.
- <2> Adds the `sort.field` index setting.
- <3> Adds the `sort.order` index setting.
- ====
- . Use the <<indices-create-data-stream,create data stream API>> to manually
- create the new data stream. The name of the data stream must match the name or
- wildcard pattern defined in the new template's `index_patterns` property.
- +
- We do not recommend <<index-documents-to-create-a-data-stream,indexing new data
- to create this data stream>>. Later, you will reindex older data from an
- existing data stream into this new stream. This could result in one or more
- backing indices that contains a mix of new and old data.
- +
- [[data-stream-mix-new-old-data]]
- .Mixing new and old data in a data stream
- [IMPORTANT]
- ====
- While mixing new and old data is safe, it could interfere with data retention.
- If you delete older indices, you could accidentally delete a backing index that
- contains both new and old data. To prevent premature data loss, you would need
- to retain such a backing index until you are ready to delete its newest data.
- ====
- +
- .*Example*
- [%collapsible]
- ====
- The following create data stream API request targets `new_logs`, which matches
- the wildcard pattern for the `new_logs_data_stream` template. Because no
- existing index or data stream uses this name, this request creates the
- `new_logs` data stream.
- [source,console]
- ----
- PUT /_data_stream/new_logs
- ----
- // TEST[continued]
- ====
- . If you do not want to mix new and old data in your new data stream, pause the
- indexing of new documents. While mixing old and new data is safe, it could
- interfere with data retention. See <<data-stream-mix-new-old-data,Mixing new and
- old data in a data stream>>.
- . If you use {ilm-init} to <<getting-started-index-lifecycle-management,automate
- rollover>>, reduce the {ilm-init} poll interval. This ensures the current write
- index doesn’t grow too large while waiting for the rollover check. By default,
- {ilm-init} checks rollover conditions every 10 minutes.
- +
- .*Example*
- [%collapsible]
- ====
- The following <<cluster-update-settings,update cluster settings API>> request
- lowers the `indices.lifecycle.poll_interval` setting to `1m` (one minute).
- [source,console]
- ----
- PUT /_cluster/settings
- {
- "transient": {
- "indices.lifecycle.poll_interval": "1m"
- }
- }
- ----
- // TEST[continued]
- ////
- [source,console]
- ----
- DELETE /_data_stream/logs
- DELETE /_data_stream/new_logs
- DELETE /_index_template/logs_data_stream
- DELETE /_index_template/new_logs_data_stream
- DELETE /_ilm/policy/logs_policy
- ----
- // TEST[continued]
- ////
- ====
- . Reindex your data to the new data stream using an `op_type` of `create`.
- +
- If you want to partition the data in the order in which it was originally
- indexed, you can run separate reindex requests. These reindex requests can use
- individual backing indices as the source. You can use the
- <<indices-get-data-stream,get data stream API>> to retrieve a list of backing
- indices.
- +
- .*Example*
- [%collapsible]
- ====
- You plan to reindex data from the `logs` data stream into the newly created
- `new_logs` data stream. However, you want to submit a separate reindex request
- for each backing index in the `logs` data stream, starting with the oldest
- backing index. This preserves the order in which the data was originally
- indexed.
- The following get data stream API request retrieves information about the `logs`
- data stream, including a list of its backing indices.
- [source,console]
- ----
- GET /_data_stream/logs
- ----
- // TEST[skip: shard failures]
- The API returns the following response. Note the `indices` property contains an
- array of the stream's current backing indices. The oldest backing index,
- `.ds-logs-000001`, is the first item in the array.
- [source,console-result]
- ----
- [
- {
- "name": "logs",
- "timestamp_field": "@timestamp",
- "indices": [
- {
- "index_name": ".ds-logs-000001",
- "index_uuid": "DXAE-xcCQTKF93bMm9iawA"
- },
- {
- "index_name": ".ds-logs-000002",
- "index_uuid": "Wzxq0VhsQKyPxHhaK3WYAg"
- }
- ],
- "generation": 2
- }
- ]
- ----
- // TESTRESPONSE[skip:unable to assert responses with top level array]
- The following <<docs-reindex,reindex API>> request copies documents from
- `.ds-logs-000001` to the `new_logs` data stream. Note the request's `op_type` is
- `create`.
- ////
- [source,console]
- ----
- PUT /_index_template/logs_data_stream
- {
- "index_patterns": [ "logs*" ],
- "data_stream": {
- "timestamp_field": "@timestamp"
- },
- "template": {
- "mappings": {
- "properties": {
- "@timestamp": {
- "type": "date"
- }
- }
- }
- }
- }
- PUT /_index_template/new_logs_data_stream
- {
- "index_patterns": [ "new_logs*" ],
- "data_stream": {
- "timestamp_field": "@timestamp"
- },
- "template": {
- "mappings": {
- "properties": {
- "@timestamp": {
- "type": "date"
- }
- }
- }
- }
- }
- PUT /_data_stream/logs
- PUT /_data_stream/new_logs
- ----
- ////
- [source,console]
- ----
- POST /_reindex
- {
- "source": {
- "index": ".ds-logs-000001"
- },
- "dest": {
- "index": "new_logs",
- "op_type": "create"
- }
- }
- ----
- // TEST[continued]
- ====
- +
- You can also use a query to reindex only a subset of documents with each
- request.
- +
- .*Example*
- [%collapsible]
- ====
- The following <<docs-reindex,reindex API>> request copies documents from the
- `logs` data stream to the `new_logs` data stream. The request uses a
- <<query-dsl-range-query,`range` query>> to only reindex documents with a
- timestamp within the last week. Note the request's `op_type` is `create`.
- [source,console]
- ----
- POST /_reindex
- {
- "source": {
- "index": "logs",
- "query": {
- "range": {
- "@timestamp": {
- "gte": "now-7d/d",
- "lte": "now/d"
- }
- }
- }
- },
- "dest": {
- "index": "new_logs",
- "op_type": "create"
- }
- }
- ----
- // TEST[continued]
- ====
- . If you previously changed your {ilm-init} poll interval, change it back to its
- original value when reindexing is complete. This prevents unnecessary load on
- the master node.
- +
- .*Example*
- [%collapsible]
- ====
- The following update cluster settings API request resets the
- `indices.lifecycle.poll_interval` setting to its default value, 10 minutes.
- [source,console]
- ----
- PUT /_cluster/settings
- {
- "transient": {
- "indices.lifecycle.poll_interval": null
- }
- }
- ----
- // TEST[continued]
- ====
- . Resume indexing using the new data stream. Searches on this stream will now
- query your new data and the reindexed data.
- . Once you have verified that all reindexed data is available in the new
- data stream, you can safely remove the old stream.
- +
- .*Example*
- [%collapsible]
- ====
- The following <<indices-delete-data-stream,delete data stream API>> request
- deletes the `logs` data stream. This request also deletes the stream's backing
- indices and any data they contain.
- [source,console]
- ----
- DELETE /_data_stream/logs
- ----
- // TEST[continued]
- ====
- ////
- [source,console]
- ----
- DELETE /_data_stream/new_logs
- DELETE /_index_template/logs_data_stream
- DELETE /_index_template/new_logs_data_stream
- ----
- // TEST[continued]
- ////
|