索引模板

edit

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

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

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

以下条件适用于索引模板:

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

创建索引模板

edit

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

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

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.ENGLISH))"
          }
        }
      }
    }
  }
}

此组件模板在新的索引匹配模板时,向映射中添加一个名为 day_of_week运行时字段

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

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"
  }
}