使用示例编辑

在以下示例中,我们将创建一个组件模板和一个索引模板。索引模板引用了两个组件模板,但只有 @package 模板存在。

创建组件模板 logs-foo_component1。由于该模板不是可选的,因此必须在创建索引模板之前创建它。

response = client.cluster.put_component_template(
  name: 'logs-foo_component1',
  body: {
    template: {
      mappings: {
        properties: {
          'host.name' => {
            type: 'keyword'
          }
        }
      }
    }
  }
)
puts response
PUT _component_template/logs-foo_component1
{
  "template": {
    "mappings": {
      "properties": {
        "host.name": {
          "type": "keyword"
        }
      }
    }
  }
}

接下来,我们将创建索引模板,它引用了两个组件模板。

  "composed_of": ["logs-foo_component1", "logs-foo_component2"]

之前,我们只创建了 logs-foo_component1 组件模板,这意味着 logs-foo_component2 丢失了。因此,我们在配置中添加了以下条目。

  "ignore_missing_component_templates": ["logs-foo_component2"],

在创建模板期间,它不会验证 logs-foo_component2 是否存在。

response = client.indices.put_index_template(
  name: 'logs-foo',
  body: {
    index_patterns: [
      'logs-foo-*'
    ],
    data_stream: {},
    composed_of: [
      'logs-foo_component1',
      'logs-foo_component2'
    ],
    ignore_missing_component_templates: [
      'logs-foo_component2'
    ],
    priority: 500
  }
)
puts response
PUT _index_template/logs-foo
{
  "index_patterns": ["logs-foo-*"],
  "data_stream": { },
  "composed_of": ["logs-foo_component1", "logs-foo_component2"],
  "ignore_missing_component_templates": ["logs-foo_component2"],
  "priority": 500
}

索引模板 logs-foo 已成功创建。可以基于此模板创建数据流。

response = client.indices.create_data_stream(
  name: 'logs-foo-bar'
)
puts response
PUT _data_stream/logs-foo-bar

查看数据流的映射,它将包含 host.name 字段。

在稍后的阶段,我们可以添加丢失的组件模板。

response = client.cluster.put_component_template(
  name: 'logs-foo_component2',
  body: {
    template: {
      mappings: {
        properties: {
          'host.ip' => {
            type: 'ip'
          }
        }
      }
    }
  }
)
puts response
PUT _component_template/logs-foo_component2
{
  "template": {
    "mappings": {
      "properties": {
        "host.ip": {
          "type": "ip"
        }
      }
    }
  }
}

这不会对数据流产生立即影响。映射 host.ip 只有在数据流下次自动滚动或手动触发滚动时才会显示在数据流映射中。

response = client.indices.rollover(
  alias: 'logs-foo-bar'
)
puts response
POST logs-foo-bar/_rollover