elasticsearch中模板的创建和使用

template是es集群内快速生成批量索引的一种快捷方式。
官方解释: 模板是一种在索引创建时配置索引的方法。

7.x之后ES支持两种模板创建方式,一种是传统的或者叫普通的创建方式,即在一次请求中指定 mappings, settings, and aliases等模板的内容; 另一种component类型,可以以模板式分多次配置mappings, settings, and aliases等内容,且一个模块可被多个索引模板引用。

这里主要为探究模板是如果发生作用的,使用传统模式创建索引模板。

在系统内创建一个索引模板my_template

PUT _template/my_template
{
  "index_patterns": ["mytest*"],
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 1
  },
  "mappings": {
    "_source": {
      "enabled": false
    },
    "properties": {
      "host_name": {
        "type": "keyword"
      },
      "created_at": {
        "type": "date",
        "format": "EEE MMM dd HH:mm:ss Z yyyy"
      }
    }
  }
}

之前一直在迷惑es中如何通过索引模板来快速生成索引,以及索引模板如何约束新创建的索引。

索引模板创建完成后

创建一个索引,索引名要能匹配索引模板中"index_patterns" 所指定的值,然后在创建出来的索引如果没有显示的声明,则所有配置都会与索引模板的设置保持一致。

参考下面的例子:

#创建一个索引
PUT mytest-1
GET mytest-1

索引mytest-1的内容

{
“mytest-1”: {
“aliases”: {},
“mappings”: {
“_source”: {
“enabled”: false
},
“properties”: {
“created_at”: {
“type”: “date”,
“format”: “EEE MMM dd HH:mm:ss Z yyyy”
},
“host_name”: {
“type”: “keyword”
}
}
},
“settings”: {
“index”: {
“routing”: {
“allocation”: {
“include”: {
“_tier_preference”: “data_content”
}
}
},
“number_of_shards”: “2”,
“provided_name”: “mytest-1”,
“creation_date”: “1721125235810”,
“number_of_replicas”: “1”,
“uuid”: “viz9-DEpQheYzJkIlatg6A”,
“version”: {
“created”: “8500010”
}
}
}
}
}

在创建索引时未指定任何内容,自动应用了模板的settings和mapping; 避免每次索引创建时都需要声明settings和字段映射; 或者约束自动创建索引的mapping和setting。

现次创建一个索引,这次指定副本数为3

PUT /mytest-2
{
  "settings": {
    "index": {
      "number_of_replicas": 3
    }
  }
}

查看索引内容

GET  mytest-2

内容

{
“mytest-2”: {
“aliases”: {},
“mappings”: {
“_source”: {
“enabled”: false
},
“properties”: {
“created_at”: {
“type”: “date”,
“format”: “EEE MMM dd HH:mm:ss Z yyyy”
},
“host_name”: {
“type”: “keyword”
}
}
},
“settings”: {
“index”: {
“routing”: {
“allocation”: {
“include”: {
“_tier_preference”: “data_content”
}
}
},
“number_of_shards”: “2”,
“provided_name”: “mytest-2”,
“creation_date”: “1721125273084”,
“number_of_replicas”: “3”,
“uuid”: “oWTDY9RLSterXOizHzGzRw”,
“version”: {
“created”: “8500010”
}
}
}
}
}

因为创建索引时指定了索引副本数,指定的值覆盖了引用索引模板提供的值。

另外创建一个索引mytest-3,,增加两个字段

PUT /mytest-3
{
  "mappings": {
    "properties": {
      "host_alias": {
        "type": "keyword"
      },
      "delete_at": {
        "type": "date",
        "format": "EEE MMM dd HH:mm:ss Z yyyy"
      }
    }
  }
}

再次查看一下索引内容

{
“mytest-3”: {
“aliases”: {},
“mappings”: {
“_source”: {
“enabled”: false
},
“properties”: {
“created_at”: {
“type”: “date”,
“format”: “EEE MMM dd HH:mm:ss Z yyyy”
},
“delete_at”: {
“type”: “date”,
“format”: “EEE MMM dd HH:mm:ss Z yyyy”
},
“host_alias”: {
“type”: “keyword”
},
“host_name”: {
“type”: “keyword”
}
}
},
“settings”: {
“index”: {
“routing”: {
“allocation”: {
“include”: {
“_tier_preference”: “data_content”
}
}
},
“number_of_shards”: “2”,
“provided_name”: “mytest-3”,
“creation_date”: “1721125461890”,
“number_of_replicas”: “1”,
“uuid”: “5Es-Ht1MQR-Yg1SPEeWr4w”,
“version”: {
“created”: “8500010”
}
}
}
}
}

索引mytest-3在模板的基础上,增加了两个字段,其他的配置与模板保持一致。

综上,索引模板的生效是索引在创建时,如果索引名匹配上了集群内模板的匹配规则,则创建索引时引用模板内指定的settings和mapping等内容; 如果匹配了多个模板刚根据优先级判断生效的值 ; 如果在索引创建时显示的指定字段或配置,最终索引的配置和字段是创建索引时指定的内容和模板内容的合集,如果与模板内的配置或字段一致,则创建索引时指定的内容优先级高覆盖模板指定的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值