Link Search Menu Expand Document Documentation Menu

创建或更新索引模板

您可以使用创建或更新索引模板 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 对象 包含索引的 aliasesmappingssettings 的模板。有关更多信息,请参阅 [#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_templatesmeta)使用递归合并,这意味着当较早的组件包含 meta 块时,新的 meta 条目将添加到索引元数据的末尾。任何包含预先存在键的条目都将被覆盖。