4532 发表于 2016-7-29 09:24:02

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

页: [1]
查看完整版本: ElKstack-es2.3-nginx日志自定义mapping的模板方法