Elasticsearch Template
Elasticsearch 7.8引入了一种更为灵活的组合索引模板(composable index template),以代替旧版索引模板(legacy template)。本文所描述的就是新版组合索引模板。
索引模板是一种告诉Elasticsearch在创建索引时如何配置索引的方法。通常,为了更精细地配置索引相关信息,我们会在创建索引之前先行配置一个索引模板;然后在手动创建索引或通过索引文档创建索引时,索引模板将自动应用于该索引。
索引模板有两种类型,索引模板(index template)和组件模板(component template)。组件模板是可重用的构建块,用于配置mapping、setting和alias。组件模板不能直接应用于索引,组件模板只能由索引模板引用,而恰恰只有索引模板才能直接应用于索引。当然,索引模板不一定必须引用组件模板才行,你也可以直接定义mapping
、setting
和alias
。
1 内置模板
Elasticsearch分别内置了若干索引模板和组件模板,我们可以分别通过GET /_index_template
与GET /_component_template
REST API查看这些模板内容。索引模板是有优先级属性的,而组件模板没有,为什么呢?因为组件模板只是一种底层可复用的模板构建块,要想应用于索引,还是需要通过索引模板来包装;如果自定义索引模板的索引模式(index_patterns)与内置索引模板一致,那么请确保优先级不一致,具体地,如果想覆盖该内置索引模板,请确保自定义索引模板的优先级值大于100。
1.1 内置索引模板
- metrics,其应用于
metrics-*-*
模式索引 - logs,其应用于
logs-*-*
模式索引
1.2 内置组件模板
- metrics-mappings
- metrics-settings
- logs-mappings
- logs-settings
2 模板优先级
explicit settings from the create index request > index template > legacy template
3 模板REST API
3.1 新增/更新
3.1.1 索引模板
代码语言:javascript复制PUT /_index_template/<index-template-name>
请求体内容:
属性 | 是否必须 | 描述 | 默认值 |
---|---|---|---|
index_patterns | √ | 通配符表达式「数组」,用于匹配数据流和索引的名称 | 无 |
template | × | 索引模板内容,可以包含mappings、settings和aliases信息 | 无 |
composed_of | × | 组件模板名称「数组」 | 无 |
priority | × | 模板优先级,正整数 | 0 |
version | × | 索引模板版本号 | 无 |
_meta | × | 索引模板的元数据,可以是任何内容 | 无 |
示例一
代码语言:javascript复制PUT /_index_template/index-template-name-000001
{
"index_patterns": [
"t*"
],
"priority": 0,
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"_source": {
"enabled": false
}
}
}
}
示例二
代码语言:javascript复制PUT /_index_template/index-template-name-000001
{
"index_patterns": [
"t*"
],
"composed_of": [
"template_with_2_shards",
"template_with_3_shards"
]
}
3.1.2 组件模板
代码语言:javascript复制PUT /_component_template/<component-template-name>
请求体内容:
属性 | 是否必须 | 描述 | 默认值 |
---|---|---|---|
template | √ | 组件模板内容,可以包含mappings、settings和aliases信息 | 无 |
version | × | 组件模板版本号 | 无 |
_meta | × | 组件模板的元数据,可以是任何内容 | 无 |
PUT /_component_template/component-template-000001
{
"template": {
"settings": {
"number_of_shards": 1
},
"aliases": {
"alias1": {},
"alias2": {
"filter": {
"term": {
"user.id": "kimchy"
}
},
"routing": "shard-1"
},
"{index}-alias": {}
}
},
"version": 1
}
3.2 删除
3.2.1 索引模板
代码语言:javascript复制DELETE /_index_template/<index-template-name>
3.2.2 组件模板
代码语言:javascript复制DELETE /_component_template/<component-template-name>
3.3 查询
3.3.1 索引模板
代码语言:javascript复制GET /_index_template/<index-template-name>
3.3.2 组件模板
代码语言:javascript复制GET /_component_template/<component-template-name>