索引模板编辑

本主题介绍 Elasticsearch 7.8 中引入的可组合索引模板。有关索引模板以前工作方式的信息,请参阅旧版模板文档

索引模板是一种告诉 Elasticsearch 在创建索引时如何配置索引的方法。对于数据流,索引模板会在创建流的后台索引时对其进行配置。模板在创建索引之前配置。在创建索引时(无论是手动创建还是通过索引文档创建),模板设置将用作创建索引的基础。

模板有两种类型:索引模板和组件模板。组件模板是可重复使用的构建块,用于配置映射、设置和别名。虽然您可以使用组件模板来构建索引模板,但它们不会直接应用于一组索引。索引模板可以包含组件模板的集合,以及直接指定设置、映射和别名。

以下条件适用于索引模板

  • 可组合模板优先于旧版模板。如果没有可组合模板匹配给定索引,则旧版模板可能仍然匹配并被应用。
  • 如果使用显式设置创建索引并且该索引也与索引模板匹配,则创建索引请求中的设置优先于索引模板及其组件模板中指定的设置。
  • 索引模板本身中指定的设置优先于其组件模板中的设置。
  • 如果新的数据流或索引与多个索引模板匹配,则使用优先级最高的索引模板。

创建索引模板编辑

使用索引模板放置组件模板API 来创建和更新索引模板。您还可以从 Kibana 的堆栈管理中管理索引模板

以下请求创建两个组件模板。

response = client.cluster.put_component_template(
  name: 'component_template1',
  body: {
    template: {
      mappings: {
        properties: {
          "@timestamp": {
            type: 'date'
          }
        }
      }
    }
  }
)
puts response

response = client.cluster.put_component_template(
  name: 'runtime_component_template',
  body: {
    template: {
      mappings: {
        runtime: {
          day_of_week: {
            type: 'keyword',
            script: {
              source: "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ROOT))"
            }
          }
        }
      }
    }
  }
)
puts response
PUT _component_template/component_template1
{
  "template": {
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date"
        }
      }
    }
  }
}

PUT _component_template/runtime_component_template
{
  "template": {
    "mappings": {
      "runtime": { 
        "day_of_week": {
          "type": "keyword",
          "script": {
            "source": "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ROOT))"
          }
        }
      }
    }
  }
}

当新索引与模板匹配时,此组件模板会将名为 day_of_week运行时字段添加到映射中。

以下请求创建一个由这些组件模板*组成*的索引模板。

response = client.indices.put_index_template(
  name: 'template_1',
  body: {
    index_patterns: [
      'te*',
      'bar*'
    ],
    template: {
      settings: {
        number_of_shards: 1
      },
      mappings: {
        _source: {
          enabled: true
        },
        properties: {
          host_name: {
            type: 'keyword'
          },
          created_at: {
            type: 'date',
            format: 'EEE MMM dd HH:mm:ss Z yyyy'
          }
        }
      },
      aliases: {
        mydata: {}
      }
    },
    priority: 500,
    composed_of: [
      'component_template1',
      'runtime_component_template'
    ],
    version: 3,
    _meta: {
      description: 'my custom'
    }
  }
)
puts response
PUT _index_template/template_1
{
  "index_patterns": ["te*", "bar*"],
  "template": {
    "settings": {
      "number_of_shards": 1
    },
    "mappings": {
      "_source": {
        "enabled": true
      },
      "properties": {
        "host_name": {
          "type": "keyword"
        },
        "created_at": {
          "type": "date",
          "format": "EEE MMM dd HH:mm:ss Z yyyy"
        }
      }
    },
    "aliases": {
      "mydata": { }
    }
  },
  "priority": 500,
  "composed_of": ["component_template1", "runtime_component_template"], 
  "version": 3,
  "_meta": {
    "description": "my custom"
  }
}