索引模板

编辑

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

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

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

以下条件适用于索引模板

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

创建索引模板

编辑

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

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

resp = client.cluster.put_component_template(
    name="component_template1",
    template={
        "mappings": {
            "properties": {
                "@timestamp": {
                    "type": "date"
                }
            }
        }
    },
)
print(resp)

resp1 = client.cluster.put_component_template(
    name="runtime_component_template",
    template={
        "mappings": {
            "runtime": {
                "day_of_week": {
                    "type": "keyword",
                    "script": {
                        "source": "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ENGLISH))"
                    }
                }
            }
        }
    },
)
print(resp1)
const response = await client.cluster.putComponentTemplate({
  name: "component_template1",
  template: {
    mappings: {
      properties: {
        "@timestamp": {
          type: "date",
        },
      },
    },
  },
});
console.log(response);

const response1 = await client.cluster.putComponentTemplate({
  name: "runtime_component_template",
  template: {
    mappings: {
      runtime: {
        day_of_week: {
          type: "keyword",
          script: {
            source:
              "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ENGLISH))",
          },
        },
      },
    },
  },
});
console.log(response1);
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"
        }
      }
    },
    "aliases": {
      "mydata": { }
    }
  },
  "priority": 500,
  "composed_of": ["component_template1", "runtime_component_template"], 
  "version": 3,
  "_meta": {
    "description": "my custom"
  }
}