跳到主要内容

模板 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启用时,遇到匹配了配置的日期格式。

dynamic_templates 更多详细用法

二、index_template

索引模板允许您定义在创建新索引时自动应用的模板。这些模板包括settingsmappings,以及一个简单的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