一,index template
根据实际业务场景预先创建需要的模板,这样在创建索引时不需要指定_setting和_mapping,对于需要频繁创建相同结构索引的场景是非常有用的。
可以创建多个 index_template,在创建索引时会根据pattern和order进行匹配和合并。
以下面的两个模板为例:
模板1:
PUT _template/default_template
{
"index_patterns":["*"],
"order":0,
"version":1,
"settings":{
"number_of_shards":1,
"number_of_replicas":2
}
}
模板2:
PUT _template/test_template
{
"index_patterns":["test*"],
"order":1,
"version":1,
"settings":{
"number_of_shards":3,
"number_of_replicas":2
},
"mappings":{
"date_detection":false,--注意这里,时间类型推断被关闭
"numeric_detection":true
}
}
下面的索引时会匹配到第一个索引,不会匹配到第二个索引。
POST default_template_test/_create/1
{
"age":10,
"name":"zhang",
"day":"2019/01/01"
}
GET default_template_test/_search
GET default_template_test/_mapping
GET default_template_test/_settings
这个索引创建时会匹配到两个索引,对于重复的设置项,第二个索引会覆盖第一个索引。
因为匹配到第二个索引,所以date字段虽然具备时间格式,但不会被推断为date类型。
PUT test_template/_doc/1
{
"age":10,
"date":"2010/01/01"
}
GET test_template/_mapping
GET test_template/_settings
二,dynamic template
dynamic template 是针对某个具体的索引来设定的,即在创建某个具体的索引时指定。
如下,这个dynamic template设置值如果是is开头的,则匹配为bool类型。如果是string类型,匹配为keyword类型。
PUT dynamic_template_test4
{
"mappings": {
"dynamic_templates":[
{
"match_is_boolean":{
"match_mapping_type":"string",
"match":"is*",
"mapping":{
"type":"boolean"
}
}
},
{
"match_is_keyword":{
"match_mapping_type":"string",
"mapping":{
"type":"keyword"
}
}
}
]
}
}
这个dynamic template设置若值是复杂类型,以name开头且不以middle结尾则copy到full_name中。
PUT dynamic_template_test3
{
"mappings": {
"dynamic_templates":[
{
"full_name":{
"path_match":"name.*",
"path_unmatch":"*.middle",
"mapping":{
"type":"text",
"copy_to":"full_name"
}
}
}
]
}
}