[[indices-component-template]] === Put component template API ++++ Put component template ++++ Creates or updates a component template. Component templates are building blocks for constructing <>. that specify index <>, <>, and <>. [source,console] -------------------------------------------------- PUT _component_template/template_1 { "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" } } } } } -------------------------------------------------- // TESTSETUP ////////////////////////// [source,console] -------------------------------------------------- DELETE _component_template/template_* -------------------------------------------------- // TEARDOWN ////////////////////////// [[put-component-template-api-request]] ==== {api-request-title} `PUT /_component_template/` [[put-component-template-api-desc]] ==== {api-description-title} An index template can be composed of multiple component templates. To use a component template, specify it in an index template's `composed_of` list. Component templates are only applied to new data streams and indices as part of a matching index template. Settings and mappings specified directly in the index template or the <> request override any settings or mappings specified in a component template. Component templates are only used during index creation. For data streams, this includes data stream creation and the creation of a stream's backing indices. Changes to component templates do not affect existing indices, including a stream's backing indices. ===== Comments in component templates You can use C-style /* */ block comments in component templates. You can include comments anywhere in the request body, except before the opening curly bracket. [[put-component-template-api-path-params]] ==== {api-path-parms-title} ``:: (Required, string) Name of the component template to create. [[put-component-template-api-query-params]] ==== {api-query-parms-title} `create`:: (Optional, boolean) If `true`, this request cannot replace or update existing component templates. Defaults to `false`. include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=master-timeout] [[put-component-template-api-request-body]] ==== {api-request-body-title} `template`:: (Required, object) This is the template to be applied, may optionally include a `mappings`, `settings`, or `aliases` configuration. include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=aliases] + NOTE: You cannot add data streams to an index alias. include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=mappings] include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=settings] `version`:: (Optional, integer) Version number used to manage component templates externally. This number is not automatically generated or incremented by {es}. `_meta`:: (Optional, object) Optional user metadata about the component template. May have any contents. This map is not automatically generated by {es}. [[put-component-template-api-example]] ==== {api-examples-title} ===== Component template with index aliases You can include <> in a component template. [source,console] -------------------------------------------------- PUT _component_template/template_1 { "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. [[applying-component-templates]] ===== Applying component templates You cannot directly apply a component template to a data stream or index. To be applied, a component template must be included in an index template's `composed_of` list. See <>. [[component-templates-version]] ===== Component template versioning You can use the `version` parameter to add a version number to a component 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 /_component_template/template_1 { "template": { "settings" : { "number_of_shards" : 1 } }, "version": 123 } -------------------------------------------------- To check the `version`, you can use the <>. [[component-templates-metadata]] ===== Component template metadata You can use the `_meta` parameter to add arbitrary metadata to a component 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 /_component_template/template_1 { "template": { "settings" : { "number_of_shards" : 1 } }, "_meta": { "description": "set number of shards to one", "serialization": { "class": "MyComponentTemplate", "id": 10 } } } -------------------------------------------------- To check the `_meta`, you can use the <> API.