一个索引模板是ES的一个功能,当匹配名称模式时触发创建新索引。例如,假设我们创建了以下索引模板:
PUT _template/template_1
{
"index_patterns": ["foo*"],
"settings": {
"number_of_shards": 1
},
"mappings": {
...
}
}
如您所见,当我们想要索引一个名为(例如)foo-44
的索引中的文档,并且该索引不存在时,ES将使用该模板(设置+映射)自动创建foo-44
索引。
您只需像上面那样简单地PUT新的设置/映射定义即可随时更新索引模板。
索引模式(不要与您在上面看到的index-patterns
属性混淆,这是两个完全不同的事物)是Kibana的一个功能,用于告诉Kibana一个索引由什么组成(所有字段、它们的类型等)。在Kibana中没有创建索引模式就什么都做不了,您可以在管理>索引模式
中进行操作。
在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还存储时间戳字段,索引模式的名称(可以跨越多个索引),同时为您定义的每个字段存储各种属性,例如对于名称
字段,索引模式包含了Kibana需要知道的以下信息:
{
"name": "name",
"type": "string",
"count": 0,
"scripted": false,
"searchable": true,
"aggregatable": false,
"readFromDocValues": false
},