123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- [[indices-templates]]
- == Index Templates
- Index templates allow you to define templates that will automatically be
- applied when new indices are created. The templates include both
- <<index-modules-settings,settings>> and <<mapping,mappings>>
- and a simple pattern template that controls whether the template should be
- applied to the new index.
- NOTE: Templates are only applied at index creation time. Changing a template
- will have no impact on existing indices. When using the create index API, the
- settings/mappings defined as part of the create index call will take precedence
- over any matching settings/mappings defined in the template.
- For example:
- [source,js]
- --------------------------------------------------
- PUT _template/template_1
- {
- "index_patterns": ["te*", "bar*"],
- "settings": {
- "number_of_shards": 1
- },
- "mappings": {
- "_doc": {
- "_source": {
- "enabled": false
- },
- "properties": {
- "host_name": {
- "type": "keyword"
- },
- "created_at": {
- "type": "date",
- "format": "EEE MMM dd HH:mm:ss Z YYYY"
- }
- }
- }
- }
- }
- --------------------------------------------------
- // CONSOLE
- // TESTSETUP
- NOTE: Index templates provide C-style /* */ block comments. Comments are allowed
- everywhere in the JSON document except before the initial opening curly bracket.
- Defines a template named `template_1`, with a template pattern of `te*` or `bar*`.
- The settings and mappings will be applied to any index name that matches
- the `te*` or `bar*` pattern.
- It is also possible to include aliases in an index template as follows:
- [source,js]
- --------------------------------------------------
- PUT _template/template_1
- {
- "index_patterns" : ["te*"],
- "settings" : {
- "number_of_shards" : 1
- },
- "aliases" : {
- "alias1" : {},
- "alias2" : {
- "filter" : {
- "term" : {"user" : "kimchy" }
- },
- "routing" : "kimchy"
- },
- "{index}-alias" : {} <1>
- }
- }
- --------------------------------------------------
- // CONSOLE
- // TEST[s/^/DELETE _template\/template_1\n/]
- <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.
- [float]
- [[delete]]
- === Deleting a Template
- Index templates are identified by a name (in the above case
- `template_1`) and can be deleted as well:
- [source,js]
- --------------------------------------------------
- DELETE /_template/template_1
- --------------------------------------------------
- // CONSOLE
- [float]
- [[getting]]
- === Getting templates
- Index templates are identified by a name (in the above case
- `template_1`) and can be retrieved using the following:
- [source,js]
- --------------------------------------------------
- GET /_template/template_1
- --------------------------------------------------
- // CONSOLE
- You can also match several templates by using wildcards like:
- [source,js]
- --------------------------------------------------
- GET /_template/temp*
- GET /_template/template_1,template_2
- --------------------------------------------------
- // CONSOLE
- To get list of all index templates you can run:
- [source,js]
- --------------------------------------------------
- GET /_template
- --------------------------------------------------
- // CONSOLE
- [float]
- [[indices-templates-exists]]
- === Template exists
- Used to check if the template exists or not. For example:
- [source,js]
- -----------------------------------------------
- HEAD _template/template_1
- -----------------------------------------------
- // CONSOLE
- The HTTP status code indicates if the template with the given name
- exists or not. Status code `200` means it exists and `404` means
- it does not.
- [float]
- [[multiple-templates]]
- === Multiple Templates Matching
- Multiple index templates can potentially match an index, in this case,
- both the settings and mappings are merged into the final configuration
- of the index. The order of the merging can be controlled using the
- `order` parameter, with lower order being applied first, and higher
- orders overriding them. For example:
- [source,js]
- --------------------------------------------------
- PUT /_template/template_1
- {
- "index_patterns" : ["*"],
- "order" : 0,
- "settings" : {
- "number_of_shards" : 1
- },
- "mappings" : {
- "_doc" : {
- "_source" : { "enabled" : false }
- }
- }
- }
- PUT /_template/template_2
- {
- "index_patterns" : ["te*"],
- "order" : 1,
- "settings" : {
- "number_of_shards" : 1
- },
- "mappings" : {
- "_doc" : {
- "_source" : { "enabled" : true }
- }
- }
- }
- --------------------------------------------------
- // CONSOLE
- // TEST[s/^/DELETE _template\/template_1\n/]
- The above will disable storing the `_source`, but
- for indices that start with `te*`, `_source` will still be enabled.
- Note, for mappings, the merging is "deep", meaning that specific
- object/property based mappings can easily be added/overridden on higher
- order templates, with lower order templates providing the basis.
- [float]
- [[versioning-templates]]
- === Template Versioning
- Templates can optionally add a `version` number, which can be any integer value,
- in order to simplify template management by external systems. The `version`
- field is completely optional and it is meant solely for external management of
- templates. To unset a `version`, simply replace the template without specifying
- one.
- [source,js]
- --------------------------------------------------
- PUT /_template/template_1
- {
- "index_patterns" : ["*"],
- "order" : 0,
- "settings" : {
- "number_of_shards" : 1
- },
- "version": 123
- }
- --------------------------------------------------
- // CONSOLE
- To check the `version`, you can
- <<common-options-response-filtering, filter responses>>
- using `filter_path` to limit the response to just the `version`:
- [source,js]
- --------------------------------------------------
- GET /_template/template_1?filter_path=*.version
- --------------------------------------------------
- // CONSOLE
- // TEST[continued]
- This should give a small response that makes it both easy and inexpensive to parse:
- [source,js]
- --------------------------------------------------
- {
- "template_1" : {
- "version" : 123
- }
- }
- --------------------------------------------------
- // TESTRESPONSE
|