|
@@ -0,0 +1,411 @@
|
|
|
+[[indices-templates]]
|
|
|
+=== Index template API
|
|
|
+++++
|
|
|
+<titleabbrev>Index template</titleabbrev>
|
|
|
+++++
|
|
|
+
|
|
|
+This documentation is about V2 (version 2) index templates. For V1 templates please see the
|
|
|
+<<indices-templates-v1,V1 template documentation>>.
|
|
|
+
|
|
|
+[NOTE]
|
|
|
+====
|
|
|
+In {es} 7.8 the `prefer_v2_templates` querystring parameter was introduced to the index, update,
|
|
|
+bulk, and create index APIs to allow configuring whether to favor V2 or V1 index templates. In 7.x
|
|
|
+the default value for this parameter is `false` meaning that the <<indices-templates-v1,V1 index
|
|
|
+templates>> take precedence. In 8.x the default value for the parameter is `true` meaning that V2
|
|
|
+index templates take precedence (V1 templates may still match if no V2 template matches).
|
|
|
+====
|
|
|
+
|
|
|
+An index template is a way to tell {es} how to configure an index when it is created. Templates are
|
|
|
+configured prior to index creation and then when an index is created either manually or through
|
|
|
+indexing a document, the template settings are used as a basis for creating the index.
|
|
|
+
|
|
|
+There are two types of templates, index templates and <<indices-component-template,component
|
|
|
+templates>>. Component templates are reusable building blocks that configure mappings, settings, and
|
|
|
+aliases. You use component templates to construct index templates, they aren't directly applied to a
|
|
|
+set of indices. Index templates can contain a collection of component templates, as well as directly
|
|
|
+specify settings, mappings, and aliases.
|
|
|
+
|
|
|
+If a new index matches more than one index template, the index template with the highest priority is used.
|
|
|
+
|
|
|
+If an index is created with explicit settings and also matches an index template,
|
|
|
+the settings from the create index request take precedence over settings specified in the index template and its component templates.
|
|
|
+
|
|
|
+[source,console]
|
|
|
+--------------------------------------------------
|
|
|
+PUT _index_template/template_1
|
|
|
+{
|
|
|
+ "index_patterns": ["te*", "bar*"],
|
|
|
+ "template": {
|
|
|
+ "settings": {
|
|
|
+ "number_of_shards": 1
|
|
|
+ },
|
|
|
+ "mappings": {
|
|
|
+ "_source": {
|
|
|
+ "enabled": false
|
|
|
+ },
|
|
|
+ "properties": {
|
|
|
+ "host_name": {
|
|
|
+ "type": "keyword"
|
|
|
+ },
|
|
|
+ "created_at": {
|
|
|
+ "type": "date",
|
|
|
+ "format": "EEE MMM dd HH:mm:ss Z yyyy"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "aliases": {
|
|
|
+ "mydata": { }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "priority": 10,
|
|
|
+ "composed_of": ["component_template1", "other_component_template"],
|
|
|
+ "version": 3,
|
|
|
+ "_meta": {
|
|
|
+ "description": "my custom"
|
|
|
+ }
|
|
|
+}
|
|
|
+--------------------------------------------------
|
|
|
+// TESTSETUP
|
|
|
+
|
|
|
+//////////////////////////
|
|
|
+
|
|
|
+[source,console]
|
|
|
+--------------------------------------------------
|
|
|
+DELETE _index_template/template_*
|
|
|
+DELETE _component_template/*
|
|
|
+--------------------------------------------------
|
|
|
+// TEARDOWN
|
|
|
+
|
|
|
+//////////////////////////
|
|
|
+
|
|
|
+[[put-index-template-api-request]]
|
|
|
+==== {api-request-title}
|
|
|
+
|
|
|
+`PUT /_index_template/<index-template>`
|
|
|
+
|
|
|
+
|
|
|
+[[put-index-template-api-desc]]
|
|
|
+==== {api-description-title}
|
|
|
+
|
|
|
+Creates or updates an index template.
|
|
|
+
|
|
|
+// tag::index-template-def[]
|
|
|
+Index templates define <<index-modules-settings,settings>> and <<mapping,mappings>> that you can
|
|
|
+automatically apply when creating new indices. {es} applies templates to new indices based on an
|
|
|
+index pattern that matches the index name.
|
|
|
+// end::index-template-def[]
|
|
|
+
|
|
|
+Index templates are only applied during index creation. Changes to index templates do not affect
|
|
|
+existing indices. Settings and mappings specified in <<indices-create-index, create index>> API
|
|
|
+requests override any settings or mappings specified in an index template.
|
|
|
+
|
|
|
+===== 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.
|
|
|
+
|
|
|
+[[getting]]
|
|
|
+===== Getting templates
|
|
|
+
|
|
|
+[[indices-get-template]]
|
|
|
+=== Get index template API
|
|
|
+++++
|
|
|
+<titleabbrev>Get index template</titleabbrev>
|
|
|
+++++
|
|
|
+
|
|
|
+Returns information about one or more index templates.
|
|
|
+
|
|
|
+[source,console]
|
|
|
+--------------------------------------------------
|
|
|
+GET /_index_template/template_1
|
|
|
+--------------------------------------------------
|
|
|
+
|
|
|
+
|
|
|
+[[get-template-api-request]]
|
|
|
+==== {api-request-title}
|
|
|
+
|
|
|
+`GET /_index_template/<index-template>`
|
|
|
+
|
|
|
+
|
|
|
+[[get-template-api-path-params]]
|
|
|
+==== {api-path-parms-title}
|
|
|
+
|
|
|
+include::{docdir}/rest-api/common-parms.asciidoc[tag=index-template]
|
|
|
++
|
|
|
+To return all index templates, omit this parameter or use a value of `*`.
|
|
|
+
|
|
|
+
|
|
|
+[[get-template-api-query-params]]
|
|
|
+==== {api-query-parms-title}
|
|
|
+
|
|
|
+include::{docdir}/rest-api/common-parms.asciidoc[tag=flat-settings]
|
|
|
+
|
|
|
+include::{docdir}/rest-api/common-parms.asciidoc[tag=local]
|
|
|
+
|
|
|
+include::{docdir}/rest-api/common-parms.asciidoc[tag=master-timeout]
|
|
|
+
|
|
|
+
|
|
|
+[[get-template-api-example]]
|
|
|
+==== {api-examples-title}
|
|
|
+
|
|
|
+
|
|
|
+[[get-template-api-wildcard-ex]]
|
|
|
+===== Get index templates using a wildcard expression
|
|
|
+
|
|
|
+[source,console]
|
|
|
+--------------------------------------------------
|
|
|
+GET /_index_template/temp*
|
|
|
+--------------------------------------------------
|
|
|
+
|
|
|
+
|
|
|
+[[get-template-api-all-ex]]
|
|
|
+===== Get all index templates
|
|
|
+
|
|
|
+[source,console]
|
|
|
+--------------------------------------------------
|
|
|
+GET /_index_template
|
|
|
+--------------------------------------------------
|
|
|
+
|
|
|
+[[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]
|
|
|
+
|
|
|
+
|
|
|
+[[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 indices during creation.
|
|
|
+
|
|
|
+include::{docdir}/rest-api/common-parms.asciidoc[tag=aliases]
|
|
|
+
|
|
|
+include::{docdir}/rest-api/common-parms.asciidoc[tag=mappings]
|
|
|
+
|
|
|
+include::{docdir}/rest-api/common-parms.asciidoc[tag=settings]
|
|
|
+
|
|
|
+`template`::
|
|
|
+(Optional, object)
|
|
|
+This is the template to be applied, may optionally include a `mappings`,
|
|
|
+`settings`, or `aliases` configuration.
|
|
|
+
|
|
|
+`composed_of`::
|
|
|
+(Optional, array of strings)
|
|
|
+An ordered list of component template names. Component templates will be merged in the order
|
|
|
+specified, meaning that the last component template specified has the highest precedence. See the
|
|
|
+<<indices-component-template,component template>> reference for information.
|
|
|
+
|
|
|
+`priority`::
|
|
|
+(Optional, integer)
|
|
|
+Priority to determine index template precedence when a new index is created. The index template with
|
|
|
+the highest priority is chosen.
|
|
|
+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}
|
|
|
+
|
|
|
+==== Composing multiple component templates
|
|
|
+
|
|
|
+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.
|
|
|
+
|
|
|
+For two component templates:
|
|
|
+
|
|
|
+[source,console]
|
|
|
+--------------------------------------------------
|
|
|
+PUT /_component_template/template_with_2_shards
|
|
|
+{
|
|
|
+ "template": {
|
|
|
+ "settings": {
|
|
|
+ "index.number_of_shards": 2
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+--------------------------------------------------
|
|
|
+
|
|
|
+[source,console]
|
|
|
+--------------------------------------------------
|
|
|
+PUT /_component_template/template_with_3_shards
|
|
|
+{
|
|
|
+ "template": {
|
|
|
+ "settings": {
|
|
|
+ "index.number_of_shards": 3
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+--------------------------------------------------
|
|
|
+
|
|
|
+The order they are specified changes the number of shards for an index:
|
|
|
+
|
|
|
+[source,console]
|
|
|
+--------------------------------------------------
|
|
|
+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.
|
|
|
+
|
|
|
+===== 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" : "kimchy" }
|
|
|
+ },
|
|
|
+ "routing" : "kimchy"
|
|
|
+ },
|
|
|
+ "{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]]
|
|
|
+===== Indices matching multiple templates
|
|
|
+
|
|
|
+When an index is created that matches multiple index templates, only the index template with the
|
|
|
+highest priority is applied. 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 an optional version number to an index template. External
|
|
|
+systems can use these version numbers to simplify template management.
|
|
|
+
|
|
|
+The `version` parameter is completely optional and not automatically generated 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 optional metadata to an index template. This is a
|
|
|
+user-defined map that can contain any data. This data will be stored in the cluster state however,
|
|
|
+so keeping it short is preferrable.
|
|
|
+
|
|
|
+The `_meta` parameter is completely optional and not automatically generated 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.
|