Index Template

创建的一系列的 Index 具有同样的 settings 及 mappings的场景是很常见的。例如,你会为日志每天创建一个索引, 这些索引名称都具有相同的前缀access-logs-2022-xx-xx, 他们的映射也都遵循一样的格式,比如都具有timestamp, status_code, referrer...字段。

Index template用于解决这个问题,它在创建新index时可以自动应用提前设定的 settings 和 mappings。

Index Template测试

创建一个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"
      }
    }
  }
}

创建新的索引进行测试:

image-20220720102541528

获取索引的mapping,此时已经自动为它生成好了:

image-20220720102627470

其他注意事项

  1. 模板仅在一个索引被新创建时,才会产生作用。修改模板不会影响已创建的索引
  2. 创建索引时可以覆盖模板中的设置,例如模板中声明number_of_shards = 2,创建索引时又声明nubmer_of_shards = 3,那么最后以实际创建索引时的声明为准:

image-20220717233211402

  1. Index template的其他API:

    PUT /_template/access-logs    # 更新index template
    GET /_template/access-logs    # 获取index template信息
    DELETE /_template/access-logs # 删除index-template