123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- [[indices-put-template]]
- === Put index template API
- ++++
- <titleabbrev>Put index template</titleabbrev>
- ++++
- Creates or updates an index template.
- Index templates define <<index-modules-settings,settings>>, <<mapping,mappings>>,
- and <<indices-aliases,aliases>> that can be applied automatically to new indices.
- [source,console]
- --------------------------------------------------
- PUT /_index_template/template_1
- {
- "index_patterns" : ["te*"],
- "priority" : 1,
- "template": {
- "settings" : {
- "number_of_shards" : 2
- }
- }
- }
- --------------------------------------------------
- // TESTSETUP
- //////////////////////////
- [source,console]
- --------------------------------------------------
- DELETE _index_template/template_*
- --------------------------------------------------
- // TEARDOWN
- //////////////////////////
- [[put-index-template-api-request]]
- ==== {api-request-title}
- `PUT /_index_template/<index-template>`
- [[put-index-template-api-desc]]
- ==== {api-description-title}
- {es} applies templates to new indices based on an
- wildcard pattern that matches the index name.
- Index templates are applied during data stream or index creation.
- For data streams, these settings and mappings are applied when the stream's backing indices are created.
- Settings and mappings specified in a <<indices-create-index, create index>>
- request override any settings or mappings specified in an index template.
- Changes to index templates do not affect
- existing indices, including the existing backing indices of a data stream.
- ===== Comments in index templates
- You can use C-style /* */ block comments in index templates. You can include comments anywhere in
- the request body, except before the opening curly bracket.
- [[put-index-template-api-path-params]]
- ==== {api-path-parms-title}
- `<index-template>`::
- (Required, string)
- Name of the index template to create.
- [[put-index-template-api-query-params]]
- ==== {api-query-parms-title}
- `create`::
- (Optional, boolean)
- If `true`, this request cannot replace or update existing index templates. Defaults to `false`.
- include::{docdir}/rest-api/common-parms.asciidoc[tag=master-timeout]
- [role="child_attributes"]
- [[put-index-template-api-request-body]]
- ==== {api-request-body-title}
- `index_patterns`::
- (Required, array of strings)
- Array of wildcard (`*`) expressions
- used to match the names of data streams and indices during creation.
- +
- [IMPORTANT]
- ====
- {es} has built-in index templates for the `metrics-*-*` and `logs-*-*` index
- patterns, each with a priority of `100`.
- {ingest-guide}/ingest-management-overview.html[{agent}] uses these templates to
- create data streams. If you use {agent}, assign your index templates a priority
- lower than `100` to avoid an overriding the built-in templates.
- Otherwise, to avoid accidentally applying the built-in templates, use a
- non-overlapping index pattern or assign templates with an overlapping pattern a
- `priority` higher than `100`.
- For example, if you don't use {agent} and want to create a template for the
- `logs-*` index pattern, assign your template a priority of `200`. This ensures
- your template is applied instead of the built-in template for `logs-*-*`.
- ====
- [xpack]#`data_stream`#::
- (Optional, object)
- Indicates whether the template is used to create data streams and their backing
- indices. If so, use an empty object as the argument: +
- `data_stream: { }`.
- +
- Data streams require a matching index template with a `data_stream` object.
- See <<create-a-data-stream-template>>.
- `template`::
- (Optional, object)
- Template to be applied. It may optionally include an `aliases`, `mappings`, or
- `settings` configuration.
- +
- .Properties of `template`
- [%collapsible%open]
- ====
- include::{docdir}/rest-api/common-parms.asciidoc[tag=aliases]
- +
- NOTE: You cannot add data streams to an index alias.
- include::{docdir}/rest-api/common-parms.asciidoc[tag=mappings]
- include::{docdir}/rest-api/common-parms.asciidoc[tag=settings]
- ====
- `composed_of`::
- (Optional, array of strings)
- An ordered list of component template names. Component templates are merged in the order
- specified, meaning that the last component template specified has the highest precedence. See
- <<multiple-component-templates,Composing multiple component templates>> for an example.
- `priority`::
- (Optional, integer)
- Priority to determine index template precedence when a new data stream or index is created. The index template with
- the highest priority is chosen. If no priority is specified the template is treated as though it is
- of priority 0 (lowest priority).
- This number is not automatically generated by {es}.
- `version`::
- (Optional, integer)
- Version number used to manage index templates externally.
- This number is not automatically generated by {es}.
- `_meta`::
- (Optional, object)
- Optional user metadata about the index template. May have any contents.
- This map is not automatically generated by {es}.
- [[put-index-template-api-example]]
- ==== {api-examples-title}
- ===== Index template with index aliases
- You can include <<indices-aliases,index aliases>> in an index template.
- [source,console]
- --------------------------------------------------
- PUT _index_template/template_1
- {
- "index_patterns" : ["te*"],
- "template": {
- "settings" : {
- "number_of_shards" : 1
- },
- "aliases" : {
- "alias1" : {},
- "alias2" : {
- "filter" : {
- "term" : {"user.id" : "kimchy" }
- },
- "routing" : "shard-1"
- },
- "{index}-alias" : {} <1>
- }
- }
- }
- --------------------------------------------------
- <1> the `{index}` placeholder in the alias name will be replaced with the
- actual index name that the template gets applied to, during index creation.
- [[multiple-templates]]
- ===== Multiple matching templates
- If multiple index templates match the name of a new index or data stream,
- the template with the highest priority is used. For example:
- [source,console]
- --------------------------------------------------
- PUT /_index_template/template_1
- {
- "index_patterns" : ["t*"],
- "priority" : 0,
- "template": {
- "settings" : {
- "number_of_shards" : 1,
- "number_of_replicas": 0
- },
- "mappings" : {
- "_source" : { "enabled" : false }
- }
- }
- }
- PUT /_index_template/template_2
- {
- "index_patterns" : ["te*"],
- "priority" : 1,
- "template": {
- "settings" : {
- "number_of_shards" : 2
- },
- "mappings" : {
- "_source" : { "enabled" : true }
- }
- }
- }
- --------------------------------------------------
- For indices that start with `te*`, `_source` will enabled, and the index will have two primary
- shards and one replica, because only `template_2` will be applied.
- NOTE: Multiple templates with overlapping index patterns at the same priority are not allowed, and
- an error will be thrown when attempting to create a template matching an existing index template at
- identical priorities.
- [[versioning-templates]]
- ===== Template versioning
- You can use the `version` parameter to add a version number to an index template.
- External systems can use these version numbers to simplify template management.
- The `version` parameter is optional and not automatically generated or used by {es}.
- To unset a `version`, replace the template without specifying one.
- [source,console]
- --------------------------------------------------
- PUT /_index_template/template_1
- {
- "index_patterns" : ["foo", "bar"],
- "priority" : 0,
- "template": {
- "settings" : {
- "number_of_shards" : 1
- }
- },
- "version": 123
- }
- --------------------------------------------------
- To check the `version`, you can use the <<indices-get-template, get index template>> API.
- [[template-metadata]]
- ===== Template metadata
- You can use the `_meta` parameter to add arbitrary metadata to an index template.
- This user-defined object is stored in the cluster state,
- so keeping it short is preferrable.
- The `_meta` parameter is optional and not automatically generated or used by {es}.
- To unset `_meta`, replace the template without specifying one.
- [source,console]
- --------------------------------------------------
- PUT /_index_template/template_1
- {
- "index_patterns": ["foo", "bar"],
- "template": {
- "settings" : {
- "number_of_shards" : 3
- }
- },
- "_meta": {
- "description": "set number of shards to three",
- "serialization": {
- "class": "MyIndexTemplate",
- "id": 17
- }
- }
- }
- --------------------------------------------------
- To check the `_meta`, you can use the <<indices-get-template, get index template>> API.
- [[data-stream-definition]]
- ===== Data stream definition
- To use an index template for a data stream, the template must include an empty `data_stream` object.
- Data stream templates are only used for a stream's backing indices,
- they are not applied to regular indices.
- See <<create-a-data-stream-template>>.
- [source,console]
- --------------------------------------------------
- PUT /_index_template/template_1
- {
- "index_patterns": ["logs-*"],
- "data_stream": { }
- }
- --------------------------------------------------
- [[multiple-component-templates]]
- ===== Composing aliases, mappings, and settings
- When multiple component templates are specified in the `composed_of` field for an index template,
- they are merged in the order specified, meaning that later component templates override earlier
- component templates. Any mappings, settings, or aliases from the parent index template are merged
- in next. Finally, any configuration on the index request itself is merged.
- In this example, the order of the two component templates changes the number of shards for an
- index:
- [source,console]
- --------------------------------------------------
- PUT /_component_template/template_with_2_shards
- {
- "template": {
- "settings": {
- "index.number_of_shards": 2
- }
- }
- }
- PUT /_component_template/template_with_3_shards
- {
- "template": {
- "settings": {
- "index.number_of_shards": 3
- }
- }
- }
- PUT /_index_template/template_1
- {
- "index_patterns": ["t*"],
- "composed_of": ["template_with_2_shards", "template_with_3_shards"]
- }
- --------------------------------------------------
- In this case, an index matching `t*` will have three primary shards. If the order of composed
- templates were reversed, the index would have two primary shards.
- Mapping definitions are merged recursively, which means that later mapping components can
- introduce new field mappings and update the mapping configuration. If a field mapping is
- already contained in an earlier component, its definition will be completely overwritten
- by the later one.
- This recursive merging strategy applies not only to field mappings, but also root options like
- `dynamic_templates` and `meta`. If an earlier component contains a `dynamic_templates` block,
- then by default new `dynamic_templates` entries are appended onto the end. If an entry already
- exists with the same key, then it is overwritten by the new definition.
|