Elasticsearch 的模板是一种允许我们定义如何自动创建索引的结构的机制。模板包含了一组规则,当一个新的索引被创建时,这些规则就会被应用于新索引的设置中。
模板的组成
模板通常由三个部分组成:模板名称、模板模式和模板设置。模板名称是模板的标识符,模板模式是一个正则表达式,用于匹配索引名称。模板设置包含有关如何自动创建索引的结构的信息,例如索引的分片和副本数量、分析器和映射设置。
{
"index_patterns": ["logs-*"],
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"_doc": {
"properties": {
"message": { "type": "text" },
"timestamp": { "type": "date" }
}
}
}
}
在上方示例中,模板的名称未指定,而是根据 index_patterns 字段中的值 logs-* 自动匹配索引名称。settings 字段定义了新创建的索引的默认设置,如副本数和分片数。mappings 字段定义了索引的映射设置,包括 _doc 类型下的字段类型和属性。
Mappings
下方为某模板的mappings
"mappings" : {
"dynamic_templates" : [
{
"strings_as_long" : {
"mapping" : {
"norms" : false,
"format" : "yyy-MM-dd HH:mm:ss||strict_date_optional_time||epoch_millis",
"type" : "date"
},
"match_mapping_type" : "long",
"match" : "*_time"
}
},
{
"strings_as_string" : {
"mapping" : {
"norms" : false,
"format" : "yyy-MM-dd HH:mm:ss||strict_date_optional_time||epoch_millis",
"type" : "date"
},
"match_mapping_type" : "string",
"match" : "*_time"
}
},
{
"long_as_keywords" : {
"mapping" : {
"norms" : false,
"type" : "keyword"
},
"match_mapping_type" : "long",
"match" : "*"
}
},
{
"strings_as_keywords" : {
"mapping" : {
"norms" : false,
"type" : "keyword"
},
"match_mapping_type" : "string",
"match" : "*"
}
}
]
}
这是一个 Elasticsearch 索引的映射(mapping)设置,通过动态模板(dynamic templates)
的方式,根据字段名和类型,动态地定义了不同类型的字段映射。具体作用如下:
strings_as_long
:将所有以 _time 结尾的 long 类型的字段,映射为 Elasticsearch 的日期类型 date
,并设置日期格式为 yyy-MM-dd HH:mm:ss||strict_date_optional_time||epoch_millis
。
strings_as_string
:将所有以 _time 结尾的 string 类型的字段,同样映射为 Elasticsearch 的日期类型 date
,并设置日期格式为 yyy-MM-dd HH:mm:ss||strict_date_optional_time||epoch_millis
。
long_as_keywords
:将所有 long
类型的字段,映射为 Elasticsearch 的 keyword
类型,即以精确匹配方式进行检索的文本类型。
strings_as_keywords
:将所有 string
类型的字段,同样映射为 Elasticsearch 的 keyword
类型。