[白开水]-ElKstack-es2.3-nginx日志自定义mapping的模板方法

引用

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


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
}
}
}
}
}
相关文章
相关标签/搜索