索引模板
索引模板允许您定义在创建新索引时自动应用的模板。模板包括 设置和映射 以及控制是否应将模板应用于新索引的简单模式模板。
模板仅在索引创建时应用。更改模板不会对现有索引产生影响,因此在您可以修改索引结构,如果想往后的索引模板也一致,需要通过删除新建模板。使用create index API时,作为create index调用的一部分定义的设置/映射将优先于模板中定义的任何匹配的设置/映射。
//创建索引模板
PUT _template/index_test_template//索引模板名
{
"order":1,//索引模板排序,当一个索引同时匹配多个索引模板时,将匹配Order数值更大的一个模板
"template": "index_test*",//指定index_test为前缀,在6.0版本以上,该字段改为"index_patterns": ["te*", "bar*"],并且支持多个匹配索引名。
"settings": {//与平时建索引时的settings一样
"number_of_replicas": 1,//副本数
"number_of_shards": 2//分片数
},
"mappings": {//与平时建索引的mappings一样
"test": {
"dynamic": "strict",//关闭类型动态映射,当存在在插入或更新操作时,包含不存在的字段,将报错
"properties": {
"name": {
"type": "text",//默认全文搜索时使用
"analyzer": "ik_max_word",
"fields": {//以不同方式索引相同字段,使用场景:match查询时直接使用:name字段,排序聚合时就可以使用name.keyword字段,当然可以定义多个field。
"keyword": {
"type": "keyword"//聚合或排序时使用:name.keyword
}
}
},
"age": {
"type": "integer"
}
}
}
}
}
//查看索引模板
GET /_template/index_test_template
//删除索引模板
DELETE /_template/index_test_template
索引模板在官方中,没有找到可直接修改索引模板的命令方式,目前来说,只能通过删除,重建索引模板的方式,来修改索引模板。
索引模板使用场景:适用于按周期,按月、按天等需要创建相同结构的索引时,特别有效。直接在代码中插入文档,便会自动寻找匹配的索引模板,完成创建操作索引操作,无需定期计划去实现索引的创建过程。
最后讲下,mappings type中的dynamic,dynamic有三个值:
1.true,新检测到的字段将添加到映射中,自动的判断数据类型,并加入mappings中。
2.false,新检测到的字段将被忽略。这些字段不会被编入索引,因此无法搜索,但仍会出现在_source
返回的匹配字段中。这些字段不会添加到映射中,必须显式添加新字段。
3.strict,如果检测到新字段,则抛出异常并拒绝该文档。必须将新字段显式添加到映射中。在实际开发中,为了避免出现,书写错误,导致创建新的字段,应该开启"dynamic": "strict",因为在索引中,一旦新增字段,我们是无法进行删除字段的,为了避免此情况的发生,可以通过此索引避免。