2020-07-23 22:48:19 -04:00
|
|
|
[[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]
|
|
|
|
|
2020-07-30 16:44:50 -04:00
|
|
|
[role="child_attributes"]
|
2020-07-23 22:48:19 -04:00
|
|
|
[[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.
|
2020-08-17 12:48:34 -04:00
|
|
|
+
|
|
|
|
[IMPORTANT]
|
|
|
|
====
|
2020-09-14 19:14:34 -04:00
|
|
|
{es} has built-in index templates for the `metrics-*-*`, `logs-*-*`, and `synthetics-*-*` index
|
2020-08-26 08:10:59 -04:00
|
|
|
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.
|
2020-08-17 12:48:34 -04:00
|
|
|
|
|
|
|
Otherwise, to avoid accidentally applying the built-in templates, use a
|
2020-08-26 08:10:59 -04:00
|
|
|
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-*-*`.
|
2020-08-17 12:48:34 -04:00
|
|
|
====
|
2020-07-23 22:48:19 -04:00
|
|
|
|
|
|
|
[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>>.
|
|
|
|
|
2020-07-30 16:44:50 -04:00
|
|
|
`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.
|
|
|
|
|
2020-07-23 22:48:19 -04:00
|
|
|
include::{docdir}/rest-api/common-parms.asciidoc[tag=mappings]
|
|
|
|
|
|
|
|
include::{docdir}/rest-api/common-parms.asciidoc[tag=settings]
|
2020-07-30 16:44:50 -04:00
|
|
|
====
|
2020-07-23 22:48:19 -04:00
|
|
|
|
|
|
|
`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" : {
|
2020-07-31 12:40:03 -04:00
|
|
|
"term" : {"user.id" : "kimchy" }
|
2020-07-23 22:48:19 -04:00
|
|
|
},
|
2020-08-03 13:31:19 -04:00
|
|
|
"routing" : "shard-1"
|
2020-07-23 22:48:19 -04:00
|
|
|
},
|
|
|
|
"{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.
|