创建的一系列的 Index 具有同样的 settings 及 mappings的场景是很常见的。例如,你会为日志每天创建一个索引, 这些索引名称都具有相同的前缀access-logs-2022-xx-xx
, 他们的映射也都遵循一样的格式,比如都具有timestamp, status_code, referrer...
字段。
Index template
用于解决这个问题,它在创建新index时可以自动应用提前设定的 settings 和 mappings。
创建一个index template
:
PUT /_template/access-logs
{
"index_patterns": ["access-logs-*"],
"mappings": {
"properties": {
"@timestamp":{
"type": "date"
},
"url.original":{
"type": "keyword"
},
"http.request.referrer":{
"type": "keyword"
},
"http.response.status_code":{
"type": "long"
}
}
}
}
这样后面所有以access-logs-
开头的索引,例如access-logs-2022-01-01
, 都会自动创建对应的mapping。
除了设置mappings外,也可以设置settings
,例如为索引设置2个replica和2个shard:
PUT /_template/access-logs
{
"index_patterns": ["access-logs-*"],
"settings": {
"number_of_replicas": 2,
"number_of_shards": 2,
"index.mapping.coerce": false
},
"mappings": {
"properties": {
"@timestamp":{
"type": "date"
},
"url.original":{
"type": "keyword"
},
"http.request.referrer":{
"type": "keyword"
},
"http.response.status_code":{
"type": "long"
}
}
}
}
创建新的索引进行测试:
获取索引的mapping,此时已经自动为它生成好了:
number_of_shards = 2
,创建索引时又声明nubmer_of_shards = 3
,那么最后以实际创建索引时的声明为准:Index template的其他API:
PUT /_template/access-logs # 更新index template
GET /_template/access-logs # 获取index template信息
DELETE /_template/access-logs # 删除index-template