索引模板是一種告訴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出去即可。
圖形界面操作