索引模板是一种告诉Elasticsearch在创建索引时如何配置索引的方法。
在创建索引之前可以先配置模板,这样在创建索引(手动创建索引或通过对文档建立索引)时,模板设置将用作创建索引的基础。
模板类型
模板有两种类型:索引模板和组件模板。
组件模板是可重用的构建块,用于配置映射,设置和别名;它们不会直接应用于一组索引。
索引模板可以包含组件模板的集合,也可以直接指定设置,映射和别名。
索引模板中的优先级
可组合模板优先于旧模板。如果没有可组合模板匹配给定索引,则旧版模板可能仍匹配并被应用。
如果使用显式设置创建索引并且该索引也与索引模板匹配,则创建索引请求中的设置将优先于索引模板及其组件模板中指定的设置。
如果新数据流或索引与多个索引模板匹配,则使用优先级最高的索引模板。
内置索引模板
Elasticsearch具有内置索引模板,每个索引模板的优先级为100,适用于以下索引模式:
logs-*-*
metrics-*-*
synthetics-*-*
- 实际需求
在logstash中的filter模块使用了uuid这个插件生成了一个随机的uuid,logstash再将日志发往elasticsearch,因为开发需要将uuid参与到elasticsearch的聚合中,这里补充elasticsearch中的text和keyword相关内容
text : 当一个字段是要被全文搜索的,比如Email内容、产品描述,应该使用text
类型。设置text类型以后,字段内容会被分析,在生成倒排索引以前,字符串会被分
析器分成一个一个词项。text类型的字段不用于排序,很少用于聚合。keyword: keyword类型适用于索引结构化的字段,比如email地址、主机名、
状态码和标签。如果字段需要进行过滤(比如查找已发布博客中status属性为
published的文章)、排序、聚合。keyword类型的字段只能通过精确值搜索到。
目的:需要将uuid的类型指定成keyword
查到索引用的是哪个索引模板,或者新建一个索引模版制定用于哪个索引,添加映射,将uuid指定为keyword,即为关键字。
在kibana的开发工具界面执行
GET _cat/templates?pretty
查询所有的模版
GET _mapping?pretty
查询所有的mapping
GET _template/logstash?pretty
- 查询指定的模版
假设返回为
{
"logstash" : {
"order" : 0,
"version" : 60001,
"index_patterns" : [
"logstash-*",
"message*"
],
"settings" : {
"index" : {
"number_of_shards" : "1",
"refresh_interval" : "5s"
}
},
"mappings" : {
"dynamic_templates" : [
{
"message_field" : {
"path_match" : "message",
"mapping" : {
"norms" : false,
"type" : "text"
},
"match_mapping_type" : "string"
}
},
{
"string_fields" : {
"mapping" : {
"norms" : false,
"type" : "text",
"fields" : {
"keyword" : {
"ignore_above" : 256,
"type" : "keyword"
}
}
},
"match_mapping_type" : "string",
"match" : "*"
}
}
],
"properties" : {
"uuid2" : {
"type" : "keyword"
},
"@timestamp" : {
"type" : "date"
},
"geoip" : {
"dynamic" : true,
"type" : "object",
"properties" : {
"ip" : {
"type" : "ip"
},
"latitude" : {
"type" : "half_float"
},
"location" : {
"type" : "geo_point"
},
"longitude" : {
"type" : "half_float"
}
}
},
"@version" : {
"type" : "keyword"
}
}
},
"aliases" : { }
}
}
将其中的某个字段的类型,改为想要的,然后POST出去即可。
图形界面操作
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。