创建索引模板使用PUT方法,索引模板用于定义在创建新的索引时自动应用的模板,可以创建普通索引模板,也可以创建别名索引模板等,索引模板中的信息主要包括以下部份:
模板创建语句语法如下所示:
PUT _template/my_template
{
"index_patterns": ...,
"settings": {
...
},
"mappings": {
...
}
}
普通索引模板通常用于定义索引中字段的映射、用到的配置的预定义等,以下示例为“logs_”和“others_”开头的索引创建模板,操作如下:
PUT _template/logs_and_others_template
{
/*索引的名称支持通配符*/
"index_patterns": ["logs_*", "others_*"],
"settings": {
/*主分片的数量*/
"number_of_shards": 1,
"number_of_replicas":0
},
"mappings": {
"_source": { "enabled": false },
"properties": {
"user_name": { "type": "keyword" },
"created": { "type": "date" }
}
}
}
定义模板的时候,支持使用C语言格式的注释/**/,JSON内容内部任何地方都可以使用注释,这个示例展示了两个注释示例。
别名索引模板
别名索引模板通常用于给索引定义一些索引别名、过滤器别名或路由别名等,自动创建一些索引“视图”,方便后续使用,操作如下:
PUT _template/logs_and_others_alias_template
{
"index_patterns": ["logs_*", "others_*"],
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"aliases": {
/*定义别名*/
"{index}-alias": {},
"alias_tomcat_filter": {
"filter": { "term": { "user_name": "tomcat" } },
"routing": "tomcat"
}
}
}
注:该别名模板中使用了{index}占位符变量,创建索引时,{index}会被替换为真实的索引名称,以达到模板中定义别名的唯一性。
3、 查看模板
查看模板的定义,使用GET方法,操作如下:
GET /_template/logs_and_others_alias_template
上面的语句是查看索引模板logs_and_others_alias_template的定义,如果希望查看其中某一部份的定义,如settings,可以使用以下语句:
GET /_template/logs_and_others_alias_template?filter_path=*.settings
4、 修改模板
模板的修改和模板的创建是一样的操作流程,只需要把修改后的模板,按照创建模板的操作,重新执行一下模板内容即可,此时就不在举例了。
5、 多模板匹配
如果创建的索引,同时匹配了多个索引模板,则会同时使用多个索引模板中的定义。如前面创建的索引模板logs_and_others_template和logs_and_others_alias_template,都会匹配"logs_*"和"others_*"开头的索引,其中logs_and_others_template中定义了字段的映射,logs_and_others_alias_template中定义了索引别名。
创建新的索引logs_1,操作如下:
PUT /logs_1
再查看该索引的相关信息:
GET /logs_1
响应:
{
"logs_1" : {
"aliases" : {
"alias_tomcat_filter" : {
"filter" : { "term" : { "user_name" : "tomcat" } },
"index_routing" : "tomcat",
"search_routing" : "tomcat"
},
"logs_1-alias" : { }
},
"mappings" : {
"_source" : { "enabled" : false },
"properties" : {
"created" : { "type" : "date" },
"user_name" : { "type" : "keyword" }
}
},
...
}
可以看到该索引中包括了前面两个索引模板中定义的别名和字段映射的内容。
前面的示例中,两个索引模板中没有定义不一样的内容,定义的都是互为补充的内容,不会让人理解上产生歧义。但是假设一个索引模板中定义的副本数为1,另一个索引模板中定义的副本数为2,存在类似这样的定义冲突,那么在建立索引的时候,就不容易确认确认索引建立出来的最终定义。
针对定义冲突的情况,可以通过以下两种方式解决:
增加order属性的示例:
PUT /_template/template_1
{
"index_patterns" : ["*"],
"order" : 0,
...
}