index template 是一个 ES 功能,用于在匹配名称模式时触发创建新索引。例如,假设我们创建了以下索引模板:
PUT _template/template_1
{
"index_patterns": ["foo*"],
"settings": {
"number_of_shards": 1
},
"mappings": {
...
}
}
如您所见,只要我们想要在名为(例如)foo-44 的索引中索引文档并且该索引不存在,那么 ES 将按顺序使用该模板(设置 + 映射)自动创建foo-44 索引。
您可以随时更新索引模板,只需像上面一样简单地放置一个新的设置/映射定义。
index pattern(不要与您在上面看到的 index-patterns 属性混淆,这是两个完全不同的东西)是 Kibana 的一个功能,用于告诉 Kibana 什么构成索引(所有字段、它们的类型、 ETC)。如果不创建索引模式,在 Kibana 中什么都不会发生,您可以在 Management > Index Patterns 中执行此操作。
在 ES 中创建索引不会在 Kibana 中创建任何索引模式。同样,在 Kibana 中创建索引模式不会在 ES 中创建任何索引。
Kibana 需要索引模式的原因是因为它需要存储索引映射中可用的不同类型的信息。例如,假设您使用以下映射创建索引:
PUT my_index
{
"mappings": {
"doc": {
"properties": {
"timestamp": {
"type": "date"
},
"name": {
"type": "text"
}
}
}
}
}
那么你将在 Kibana 中创建的相应索引模式将具有以下内容:
GET .kibana/doc/index-pattern:16a98050-a53f-11e8-82ab-af0d48c6ddd8
{
"type": "index-pattern",
"updated_at": "2018-08-21T12:38:22.509Z",
"index-pattern": {
"title": "my_index*",
"timeFieldName": "timestamp",
"fields": """[{"name":"_id","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":false},{"name":"_index","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":false},{"name":"_score","type":"number","count":0,"scripted":false,"searchable":false,"aggregatable":false,"readFromDocValues":false},{"name":"_source","type":"_source","count":0,"scripted":false,"searchable":false,"aggregatable":false,"readFromDocValues":false},{"name":"_type","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":false},{"name":"name","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"timestamp","type":"date","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":true}]"""
}
}
如您所见,Kibana 还存储时间戳字段,即索引模式的名称(可以跨越多个索引)。它还为您定义的每个字段存储各种属性,例如,对于 name 字段,索引模式包含 Kibana 需要知道的以下信息:
{
"name": "name",
"type": "string",
"count": 0,
"scripted": false,
"searchable": true,
"aggregatable": false,
"readFromDocValues": false
},