[白開水]-ElKstack-es2.3-nginx日誌自定義mapping的模板方法

引用

mapping默認是集成於template的,當然如果mapping有設定的話,就走自定義的mapping.

mapping相當於字段描述,比如某個字段是float,某個字段需要分詞,某個字段是date類型,是否可以搜索

template,字面意思是模板,他所作的事情也是模板的事情,他可以針對index做別名,也就是說,xiaorui* = xiaorui_v2_2013 xiaorui_v2_2014 … 通配符

elasticsearch默認是字符串的類型的字段都會分詞的,通俗說,你使用elasticsearch query_string match都可以命中查詢的。

但是所有的字段分詞,他也會帶來性能及空間佔用問題,所以我們只會針對特定的字段來進行開放分詞。

問題

es在mapping默認的時候,會對nginx訪問日誌某些字段進行分詞,這樣變會導致nginx展示時字段表意不明。

解決

可以通過template自定義mapping,來解決此類問題

而mapping中字段屬性:"index": "not_analyzed",決定着該字段是否被分詞

具體步驟

命令解釋

模板查看

GET/_template    查看當前es系統所有的模板詳情

新建模板

template_1  爲模板名


PUT/_template/template_1
{
"template":"t-*",
"settings":{
"number_of_shards":1
},
"mappings":{
"type1":{
"_source":{
"enabled":false
}
}
}
}


nginx模板實例:

PUT/_template/ dev-nginx-logs
{
"template": "dev-nginx-logs-*",
"settings": {
"number_of_shards": "5",
"number_of_replicas": "1"
},
"mappings": {
"nginx_access_logs": {
"properties": {
"@timestamp": {
"format": "dateOptionalTime",
"type": "date",
"index": "not_analyzed",
"doc_values": true
},
"status": {
"type": "string",
"index": "not_analyzed",
"doc_values": true
},
"upstreamhost": {
"type": "string",
"index": "not_analyzed",
"doc_values": true
},
"upstreamtime": {
"type": "float"
},
"url": {
"type": "string",
"index": "not_analyzed",
"doc_values": true
}
}
}
}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章