创建
新版本索引自动配置功能,主要依托组件模板(component template)和索引模板(index template)2 个概念来完成。下面依次来介绍他们是如何实现的。
组件模板的创建
组件模板是用来构建索引模板的特殊模板,它的内容一般是多个索引模板的公有配置,索引模板在创建时,可以声明引用多个组件模板。
在组件模板中可配置的索引内容有:别名aliases、配置settings、映射mappings3 个,具体配置方式与创建索引时一致。组件模板只有在被索引模板引用时,才会发挥作用。当我们需要创建或更新一个组件模板时,向/_component_template路径发送 PUT 请求即可。
具体示例如下:
# 创建组件模板 PUT /_component_template/template_1?create=true&master_timeout=30s #1 { "template": { # 2 "settings": { "number_of_shards": 1 }, "mappings": { "_source": { "enabled": false }, "properties": { "name": { "type": "keyword" } } }, "aliases": { "test-index": {} } }, "version": 1, #3 "_meta": { #4 "description1": "for test", "description2": "create by phoenix" } }
1、#1 处向/_component_template/template_1发送 PUT 请求创建一个名为template_1的组件模板,模板名可以任意替换,需要注意的是,Elasticsearch 中预置有6个组件模板:logs-mappings、logs-settings、metrics-mappings、metrics-settings、synthetics-mapping、synthetics-settings,建议不要覆盖。同时 url 中还包含2个可选的查询参数create和master_timeout。
l create,表示此次请求是否是创建请求,如果为 true 则系统中如果已有同名的会报错,默认为 false,表示请求可以是创建也可能是更新请求。
l master_timeout,表示可以容忍的连接 Elasticsearch 主节点的时间,默认是30s,如果超时则请求报错。
2、#2 处template的内容是对索引的设置,主要有别名,映射和配置,在本例中配置了索引分片数是 1,_source不用保存,索引有名为name的属性,类型是 keyword,同时索引别名有test-index。
3、#3 处是用户指定的组件模板的版本号,为了方便外部管理,此为可选项,默认不会为组件模板增加版本号。
4、#4 处是用户为组件模板设置的 meta 信息,该对象字段可随意配置,但不要设置的过大。该字段也是可选的。
索引模板的创建
创建或更新一个索引模板的方式都是向/_index_template发送 1 个 PUT 请求。索引模板可以配置的内容主要有 3 类,分别是别名aliases、配置settings、映射mappings。这 3 部分的配置方式,与创建索引时的设置完全一样这里不再赘述。
创建索引模板的示例:
PUT /_index_template/test_template?create=false&master_timeout=30s #1 { "index_patterns" : ["te*"], #2 "priority" : 1, #3 "composed_of": ["template_1"], #4 "template": { #5 "settings" : { "number_of_shards" : 2 } }, "version": 2, #6 "_meta": { #7 "user": "phoenix", "time": "2021/05/06" } } # 测试模板 POST /_index_template/_simulate_index/test #8 { "template" : { "settings" : { "index" : { "number_of_shards" : "2" # 索引模板覆盖了组件模板的配置 } }, "mappings" : { "_source" : { # 使用组件模板的配置 "enabled" : false }, "properties" : { "name" : { # 使用组件模板的配置 "type" : "keyword" } } }, "aliases" : { "test-index" : { } # 使用组件模板的配置 } } }
1、#1 处向/_index_template/test_template发送 PUT 请求创建索引模板,模板名称为test_template,名称可任意填写,与组件模板相同,有2个可选的查询参数:
l create,表示此次请求是否是创建请求,如果为 true 则系统中如果已有同名模板则会报错,默认为 false,表示请求可以是创建也可能是更新请求。
l master_timeout,表示可以容忍的连接 Elasticsearch 主节点的时间,默认是30s,如果超时则请求报错。
2、#2 处index_patterns字段用于设置匹配索引的规则,目前仅支持使用索引名称匹配,支持*号作为通配符,该字段是必填字段。需要注意 Elasticsearch 自带了3种匹配规则的索引模板:logs-*-*、metrics-*-*、synthetics-*-*,建议不要做相同配置。
3、#3 处priority字段配置的是模板权重,当 1 个索引名符合多个模板的匹配规则时, 会使用该值最大的作为最终使用的模板,此值默认为 0,Elasticsearch 自带的模板此值是100。
4、#4 处composed_of字段用于配置索引模板引用的组件模板,此处引用的组件模板配置自动会增加到该模板中。此例我们引用了之前创建的template_1组件。
5、#5 处template的内容是对索引的设置。
6、#6 处是用户指定的索引模板的版本号,为了方便外部管理,此为可选项,默认不会为组件模板增加版本号。
7、#7 处是用户为索引模板设置的 Meta 信息,该对象字段可随意配置,但不要设置的过大。该字段也是可选的。
8、#8 处用模拟 API 创建名为test的索引,我们发现返回的模板包含了模板test_template和组件template_1的所有配置。