mapping默认是集成于template的,固然若是mapping有设定的话,就走自定义的mapping.nginx
mapping至关于字段描述,好比某个字段是float,某个字段须要分词,某个字段是date类型,是否能够搜索bash
template,字面意思是模板,他所做的事情也是模板的事情,他能够针对index作别名,也就是说,xiaorui* = xiaorui_v2_2013 xiaorui_v2_2014 … 通配符app
elasticsearch默认是字符串的类型的字段都会分词的,通俗说,你使用elasticsearch query_string match均可以命中查询的。elasticsearch
可是全部的字段分词,他也会带来性能及空间占用问题,因此咱们只会针对特定的字段来进行开放分词。ide
es在mapping默认的时候,会对nginx访问日志某些字段进行分词,这样变会致使nginx展现时字段表意不明。性能
能够经过template自定义mapping,来解决此类问题ui
而mapping中字段属性:"index": "not_analyzed",决定着该字段是否被分词url
GET/_template 查看当前es系统全部的模板详情spa
template_1 为模板名日志
PUT/_template/template_1 { "template":"t-*", "settings":{ "number_of_shards":1 }, "mappings":{ "type1":{ "_source":{ "enabled":false } } } }
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 } } } } }