引用
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 } } } } }