创建或更新索引模板
您可以使用创建或更新索引模板 API 来创建具有预定义映射和设置的索引,以及更新现有索引模板。
端点
PUT _index_template/<template-name>
POST _index_template/<template-name>
路径参数
参数 | 数据类型 | 描述 |
---|---|---|
template-name | 字符串 | 索引模板的名称。 |
查询参数
支持以下可选查询参数。
参数 | 数据类型 | 描述 |
---|---|---|
create | 布尔型 | 当为 true 时,API 无法替换或更新任何现有索引模板。默认值为 false 。 |
cluster_manager_timeout | 时间 | 等待连接到集群管理器节点的时间量。默认值为 30s 。 |
请求正文字段
请求正文中可以使用以下选项来自定义索引模板。
参数 | 类型 | 描述 |
---|---|---|
index_patterns | 字符串数组 | 在模板创建期间匹配数据流和索引名称的通配符表达式数组。必需。 |
composed_of | 字符串数组 | 组件模板名称的有序列表。这些模板将按照指定的顺序合并。有关更多信息,请参阅使用多个组件模板。可选。 |
data_stream | 对象 | 使用此选项时,请求将根据模板创建数据流和任何后台索引。此设置需要匹配的索引模板。它也可以与 hidden 设置一起使用,当设置为 true 时,此设置会隐藏数据流后台索引。可选。 |
_meta | 对象 | 可选元数据,提供有关索引模板的详细信息。可选。 |
priority | 整数 | 一个数字,用于确定在创建新索引或数据流时哪个索引模板优先。OpenSearch 会选择优先级最高的模板。如果未给定优先级,则模板将分配 0 ,表示最低优先级。可选。 |
template | 对象 | 包含索引的 aliases 、mappings 或 settings 的模板。有关更多信息,请参阅 [#template]。可选。 |
version | 整数 | 用于管理索引模板的版本号。OpenSearch 不会自动设置版本号。可选。 |
context | 对象 | (实验性)context 参数提供可应用于索引的特定用例预定义模板。在为模板声明的所有设置和映射中,上下文模板具有最高优先级。有关更多信息,请参阅索引上下文。 |
模板
您可以在请求正文中使用以下对象和 template
选项。
alias
作为键与模板关联的别名名称。当请求正文中存在 template
选项时必需。此选项支持多个别名。
对象正文包含以下可选别名参数。
参数 | 数据类型 | 描述 |
---|---|---|
filter | 查询 DSL 对象 | 限制别名可访问文档数量的查询。 |
index_routing | 字符串 | 将索引操作路由到特定分片的值。指定时,会覆盖索引操作的 routing 值。 |
is_hidden | 布尔型 | 当为 true 时,别名被隐藏。默认值为 false 。所有别名索引的此设置值必须匹配。 |
is_write_index | 布尔型 | 当为 true 时,索引是别名的写入索引。默认值为 false 。 |
路由 | 字符串 | 用于将索引和搜索操作路由到特定分片的值。 |
search_routing | 字符串 | 用于将特定搜索操作写入特定分片的值。指定时,此选项会覆盖搜索操作的 routing 值。 |
mappings
索引中存在的字段映射。有关更多信息,请参阅映射和字段类型。可选。
settings
索引的任何配置选项。有关更多信息,请参阅索引设置。
示例请求
以下示例展示了如何使用创建或更新索引模板 API。
带索引别名的索引模板
以下示例请求在模板中包含索引别名
PUT _index_template/alias-template
{
"index_patterns" : ["sh*"],
"template": {
"settings" : {
"number_of_shards" : 1
},
"aliases" : {
"alias1" : {},
"alias2" : {
"filter" : {
"term" : {"user.id" : "hamlet" }
},
"routing" : "shard-1"
},
"{index}-alias" : {}
}
}
}
使用多个匹配模板
当多个索引模板与新索引或数据流的名称匹配时,将使用优先级最高的模板。例如,以下两个请求创建了具有不同优先级的索引模板
PUT /_index_template/template_one
{
"index_patterns" : ["h*"],
"priority" : 0,
"template": {
"settings" : {
"number_of_shards" : 1,
"number_of_replicas": 0
},
"mappings" : {
"_source" : { "enabled" : false }
}
}
}
PUT /_index_template/template_two
{
"index_patterns" : ["ha*"],
"priority" : 1,
"template": {
"settings" : {
"number_of_shards" : 2
},
"mappings" : {
"_source" : { "enabled" : true }
}
}
}
对于以 ha
开头的索引,_source
已启用。由于只应用了 template_two
,因此索引将有两个主分片和一个副本。
不允许具有相同优先级的重叠索引模式。尝试创建与现有索引模板具有相同优先级的模板时,将发生错误。
添加模板版本控制
以下示例请求为索引模板添加了 version
号,这简化了外部系统的模板管理
PUT /_index_template/template_one
{
"index_patterns" : ["mac", "cheese"],
"priority" : 0,
"template": {
"settings" : {
"number_of_shards" : 1
}
},
"version": 1
}
添加模板元数据
以下示例请求使用 meta
参数向索引模板添加元数据。所有元数据都存储在集群状态中
PUT /_index_template/template_one
{
"index_patterns": ["rom", "juliet"],
"template": {
"settings" : {
"number_of_shards" : 2
}
},
"_meta": {
"description": "Where art thou",
"serialization": {
"class": "MyIndexTemplate",
"id": 12
}
}
}
数据流定义
包含一个 data_stream
对象以将索引模板用于数据流,如以下示例请求所示
PUT /_index_template/template_1
{
"index_patterns": ["logs-*"],
"data_stream": { }
}
使用多个组件模板
当将多个组件模板与 composed_of
字段一起使用时,组件模板将按指定顺序合并。接下来,将合并组件的父索引模板中的所有映射、设置和别名。最后,将合并添加到索引请求中的任何配置选项。
在以下示例请求中,具有 h*
的索引有两个合并的主分片。如果请求正文中的顺序颠倒,则索引将有一个主分片
PUT /_component_template/template_with_1_shard
{
"template": {
"settings": {
"index.number_of_shards": 1
}
}
}
PUT /_component_template/template_with_2_shards
{
"template": {
"settings": {
"index.number_of_shards": 2
}
}
}
PUT /_index_template/template_1
{
"index_patterns": ["h*"],
"composed_of": ["template_with_1_shard", "template_with_2_shards"]
}
映射定义和根选项(如 dynamic_templates
和 meta
)使用递归合并,这意味着当较早的组件包含 meta
块时,新的 meta
条目将添加到索引元数据的末尾。任何包含预先存在键的条目都将被覆盖。