赞
踩
template是es集群内快速生成批量索引的一种快捷方式。
官方解释: 模板是一种在索引创建时配置索引的方法。
7.x之后ES支持两种模板创建方式,一种是传统的或者叫普通的创建方式,即在一次请求中指定 mappings, settings, and aliases等模板的内容; 另一种component类型,可以以模板式分多次配置mappings, settings, and aliases等内容,且一个模块可被多个索引模板引用。
这里主要为探究模板是如果发生作用的,使用传统模式创建索引模板。
PUT _template/my_template { "index_patterns": ["mytest*"], "settings": { "number_of_shards": 2, "number_of_replicas": 1 }, "mappings": { "_source": { "enabled": false }, "properties": { "host_name": { "type": "keyword" }, "created_at": { "type": "date", "format": "EEE MMM dd HH:mm:ss Z yyyy" } } } }
之前一直在迷惑es中如何通过索引模板来快速生成索引,以及索引模板如何约束新创建的索引。
索引模板创建完成后
创建一个索引,索引名要能匹配索引模板中"index_patterns" 所指定的值,然后在创建出来的索引如果没有显示的声明,则所有配置都会与索引模板的设置保持一致。
参考下面的例子:
#创建一个索引
PUT mytest-1
GET mytest-1
索引mytest-1的内容
{
“mytest-1”: {
“aliases”: {},
“mappings”: {
“_source”: {
“enabled”: false
},
“properties”: {
“created_at”: {
“type”: “date”,
“format”: “EEE MMM dd HH:mm:ss Z yyyy”
},
“host_name”: {
“type”: “keyword”
}
}
},
“settings”: {
“index”: {
“routing”: {
“allocation”: {
“include”: {
“_tier_preference”: “data_content”
}
}
},
“number_of_shards”: “2”,
“provided_name”: “mytest-1”,
“creation_date”: “1721125235810”,
“number_of_replicas”: “1”,
“uuid”: “viz9-DEpQheYzJkIlatg6A”,
“version”: {
“created”: “8500010”
}
}
}
}
}
在创建索引时未指定任何内容,自动应用了模板的settings和mapping; 避免每次索引创建时都需要声明settings和字段映射; 或者约束自动创建索引的mapping和setting。
PUT /mytest-2
{
"settings": {
"index": {
"number_of_replicas": 3
}
}
}
查看索引内容
GET mytest-2
内容
{
“mytest-2”: {
“aliases”: {},
“mappings”: {
“_source”: {
“enabled”: false
},
“properties”: {
“created_at”: {
“type”: “date”,
“format”: “EEE MMM dd HH:mm:ss Z yyyy”
},
“host_name”: {
“type”: “keyword”
}
}
},
“settings”: {
“index”: {
“routing”: {
“allocation”: {
“include”: {
“_tier_preference”: “data_content”
}
}
},
“number_of_shards”: “2”,
“provided_name”: “mytest-2”,
“creation_date”: “1721125273084”,
“number_of_replicas”: “3”,
“uuid”: “oWTDY9RLSterXOizHzGzRw”,
“version”: {
“created”: “8500010”
}
}
}
}
}
因为创建索引时指定了索引副本数,指定的值覆盖了引用索引模板提供的值。
PUT /mytest-3
{
"mappings": {
"properties": {
"host_alias": {
"type": "keyword"
},
"delete_at": {
"type": "date",
"format": "EEE MMM dd HH:mm:ss Z yyyy"
}
}
}
}
再次查看一下索引内容
{
“mytest-3”: {
“aliases”: {},
“mappings”: {
“_source”: {
“enabled”: false
},
“properties”: {
“created_at”: {
“type”: “date”,
“format”: “EEE MMM dd HH:mm:ss Z yyyy”
},
“delete_at”: {
“type”: “date”,
“format”: “EEE MMM dd HH:mm:ss Z yyyy”
},
“host_alias”: {
“type”: “keyword”
},
“host_name”: {
“type”: “keyword”
}
}
},
“settings”: {
“index”: {
“routing”: {
“allocation”: {
“include”: {
“_tier_preference”: “data_content”
}
}
},
“number_of_shards”: “2”,
“provided_name”: “mytest-3”,
“creation_date”: “1721125461890”,
“number_of_replicas”: “1”,
“uuid”: “5Es-Ht1MQR-Yg1SPEeWr4w”,
“version”: {
“created”: “8500010”
}
}
}
}
}
索引mytest-3在模板的基础上,增加了两个字段,其他的配置与模板保持一致。
综上,索引模板的生效是索引在创建时,如果索引名匹配上了集群内模板的匹配规则,则创建索引时引用模板内指定的settings和mapping等内容; 如果匹配了多个模板刚根据优先级判断生效的值 ; 如果在索引创建时显示的指定字段或配置,最终索引的配置和字段是创建索引时指定的内容和模板内容的合集,如果与模板内的配置或字段一致,则创建索引时指定的内容优先级高覆盖模板指定的值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。