索引模板

编辑

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

索引模板是一种告诉 Elasticsearch 如何在创建索引时配置索引的方式。对于数据流,索引模板会在创建数据流的支撑索引时配置这些索引。模板是在索引创建之前配置的。当创建索引时 - 无论是手动创建还是通过索引文档创建 - 模板设置都用作创建索引的基础。

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

以下条件适用于索引模板

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

创建索引模板

编辑

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

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

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