index template 和dynamic template都是可以根据规则来指定字段的类型,区别就在于前者指定的是多索引的级别,可以根据索引的名称创建pattern来设置mapping,也可以设置符合pattern的分片等一些设置,后者是单个索引,而dynamic template将mapping的设置又划分的更为细致,比如可以指定copy_to等等,之前线上日志有一个索引的date类型经常报错,主要是打出来的日志存在五花八门的格式,然后使用intex template类型指定了date类型为string,整个世界清静了,logstash在将数据写入es时,又重新生成了一个时间戳,所以对日志排查不会有太大问题.
index template
PUT /_template/template_1
{
"index_patterns" : ["*"],
"order" : 0,
"settings" : {
"number_of_shards" : 1
},
"mappings" : {
"_source" : { "enabled" : false }
}
}
PUT /_template/template_2
{
"index_patterns" : ["te*"],
"order" : 1,
"settings" : {
"number_of_shards" : 1
},
"mappings" : {
"_source" : { "enabled" : true }
}
}
PUT my_index
{
"mappings": {
"dynamic_templates": [
{
"full_name": {
"path_match": "name.*",
"path_unmatch": "*.middle",
"mapping": {
"type": "text",
"copy_to": "full_name"
}
}
}
]
}
}
PUT my_index/_doc/1
{
"name": {
"first": "John",
"middle": "Winston",
"last": "Lennon"
}
}