模板 template
ES中的模板概念有两处,我们加以区分 避免混淆:
dynamic_templates 动态模板(字段级): 在索引的mapping内定义,如输入大量字段,在无法预期字段类型的情况下交由动态模板自动映射。
index_template 索引模板(索引级): 由独立的 _template API 管理,允许您定义在创建新索引时自动应用的模板,你也可以在
index_template
内定义字段自动映射dynamic_templates
。
一、dynamic_templates
动态模板示例
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_templates": [
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
],
"properties": {
"@timestamp": {
"type": "date"
}
}
}
}
}
POST my_index/_doc
{
"name":"jackma"
}
说明:my_index的新字段 name
将被映射为 keyword
,而非默认的 keyword and text
properties 内的字段定义优先级高于动态映射。
match_mapping_type 参数
- string 遇到字符串。
- boolean 遇到true或false时。
- double 遇到带有小数部分的数字。
- long 遇到没有小数部分的数字。
- object 遇到对象。
- date 当date_detection启用时,遇到匹配了配置的日期格式。
二、index_template
索引模板允许您定义在创建新索引时自动应用的模板。这些模板包括settings
和mappings
,以及一个简单的pattern
,用于控制模板是否应应用于新索引。
模板仅在创建索引时应用。更改模板不会影响现有索引。使用创建索引API时,作为创建索引调用自定义的settings/mappings
优先于模板中定义的任何匹配settings/mappings
。
新建索引模板
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"
}
}
}
}
}
定义名为template_1的模板,模板模式为te*
或bar*
。设置和映射将应用于与te*
或bar*
模式匹配的任何索引名称。
也可以在索引模板中包含别名,如下所示
PUT _template/template_1
{
"index_patterns" : ["te*"],
"settings" : {
"number_of_shards" : 1
},
"aliases" : {
"alias1" : {},
"alias2" : {
"filter" : {
"term" : {"user" : "kimchy" }
},
"routing" : "kimchy"
},
"{index}-alias" : {}
}
}
索引模板内定义字段动态映射示例
{
"index_patterns": [
"log*"
],
"order": 1000,
"mappings": {
"doc": {
"dynamic_templates": [
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
],
"properties": {
"@timestamp": {
"type": "date"
},
"timestamp": {
"type": "date"
}
}
}
},
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "1"
}
}
}
删除模板
DELETE /_template/template_1
获取模板
根据模板名称或通配符获取模板
GET /_template/template_1
GET /_template/temp*
GET /_template/template_1,template_2
是否存在
HEAD _template/template_1
多个模板匹配
多个索引模板可能会匹配一个索引,在这种情况下,设置和映射都会合并到索引的最终配置中。可以使用order参数控制合并的顺序,先应用较低的顺序,然后再应用较高的顺序。例如
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 }
}
}
}
模板版本
模板可以选择添加版本号(可以是任何整数值),以简化外部系统的模板管理。版本字段是完全可选的,仅用于模板的外部管理。要取消设置版本,只需替换模板而不指定模板。
PUT /_template/template_1
{
"index_patterns" : ["*"],
"order" : 0,
"settings" : {
"number_of_shards" : 1
},
"version": 123
}
要检查版本,可以使用filter_path筛选:
GET /_template/template_1?filter_path=*.version