我在这里阅读了我的问题的解释:
https://discuss.elastic.co/t/whats-the-differece-between-index-pattern-and-index-template/54948
但是,我仍然不了解其中的区别。定义索引PATTERN时,它根本不会影响索引的创建吗?另外,如果我创建索引但没有相应的索引模式会怎样?如何查看用于索引模式的映射,以便知道如何使用Mapping API对其进行更新?
在旁注中,文档说您可以通过单击“设置”然后单击“索引”选项卡来管理索引模式。我正在查看Kibana,但没有看到任何设置标签。我可以通过“管理”标签查看索引模式,但那里没有任何设置标签
答案 0 :(得分:2)
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组成索引的地方(所有字段) ,其类型等)。如果不创建索引模式,那么在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还存储了timestamp字段,即索引模式的名称(,可以跨越多个索引)。它还为您定义的每个字段存储各种属性,例如,对于name
字段,索引模式包含Kibana需要知道的以下信息:
{
"name": "name",
"type": "string",
"count": 0,
"scripted": false,
"searchable": true,
"aggregatable": false,
"readFromDocValues": false
},