搭好elk 后,有时候会发现kibana 统计数据时,数据类型不对,这个时候就和elasticsearch的mapping有关,虽然我们可以用logstash修改传入es里的数据类型,比如 float 或者int 或者string。但是没有double等类型,就算转换了,你会发现写入es的数据还是根据es里mapping表来定义的。接下来我们来学习修改es的mapping,当然mapping的功能有很多种,比如定义索引是否分词,分片和副本的数量是多少等等。

1) 什么是mapping

ES的mapping非常类似于静态语言中的数据类型:声明一个变量为int类型的变量, 以后这个变量都只能存储int类型的数据。同样的, 一个number类型的mapping字段只能存储number类型的数据。

同语言的数据类型相比,mapping还有一些其他的含义,mapping不仅告诉ES一个field中是什么类型的值, 它还告诉ES如何索引数据以及数据是否能被搜索到。

当你的查询没有返回相应的数据, 你的mapping很有可能有问题。当你拿不准的时候, 直接检查你的mapping。

2) 剖析mapping

一个mapping由一个或多个analyzer组成, 一个analyzer又由一个或多个filter组成的。当ES索引文档的时候,它把字段中的内容传递给相应的analyzer,analyzer再传递给各自的filters。

filter的功能很容易理解:一个filter就是一个转换数据的方法, 输入一个字符串,这个方法返回另一个字符串,比如一个将字符串转为小写的方法就是一个filter很好的例子。

一个analyzer由一组顺序排列的filter组成,执行分析的过程就是按顺序一个filter一个filter依次调用, ES存储和索引最后得到的结果。

总结来说, mapping的作用就是执行一系列的指令将输入的数据转成可搜索的索引项。

3)实战转换mapping数据类型

我们使用logstash 传入一个索引,这个时候这个索引加载的为默认mapping,如下

{

  • "parking_total": {

    • "mappings": {

      • "parking_total": {

        • "properties": {

          • "@timestamp": {

            • "type": "date",
            • "format": "strict_date_optional_time||epoch_millis"

            },

          • "@version": {
            • "type": "string"

            },

          • "active": {
            • "type": "string"

            },

          • "host": {
            • "type": "string"

            },

          • "kafka": {
            • "properties": {

              • "consumer_group": {

                • "type": "string"

                },

              • "msg_size": {
                • "type": "long"

                },

              • "offset": {
                • "type": "long"

                },

              • "partition": {
                • "type": "long"

                },

              • "topic": {
                • "type": "string"

                }

              }

            },

          • "logdate": {
            • "type": "string"

            },

          • "message": {
            • "type": "string"

            },

          • "path": {
            • "type": "string"

            },

          • "total": {
            • "type": "string"

            },

          • "type": {
            • "type": "string"

            }

          }

        }

      }

    }

}

其中我们就是要修改 total 和 active 这2个字段,修改mapping时需要将索引全部删除。这里我们来操作一下

接下来,我们先创建这个索引的mapping 因为索引没有的时候,mapping也可以存在,其实是删除索引的时候mapping 不会跟着删除的,当然创建的时候,如果有的字段没有定义,mapping 会自动按照默认来定义。

{  "mappings":
          {
        "parking_total" : {  
            "properties" : {  
                "@timestamp" : {  
                    "type" : "date"  
                },  
                "message" : {  
                    "type" : "string"  
                },  
                "total" : {  
                    "type" : "double"  
                },  
                 "active" : {  
                    "type" : "double"  
                }
            }  
        }  
    }  
 }

这样在重新导入数据,就成功啦。

                                                  by:V

最新文章

  1. chrome拓展开发实战:页面脚本的拦截注入
  2. Mosquitto搭建Android推送服务(三)Mosquitto集群搭建
  3. Caliburn.Micro学习笔记(一)----引导类和命名匹配规则
  4. 转载:CDH5.X完全卸载步骤
  5. 动画总结(UIView的动画)
  6. 修改oracle密码有效期限制
  7. Javascript 笔记与总结(2-13)定时器 setTimeout 和 setInterval
  8. POJ 3701 概率DP
  9. C++的MFC,与C#的.NET
  10. Hash table in PowerShell
  11. 苹果公司的新的编程语言 Swift 高级语言(十一)--初始化类的析构函数的一个实例
  12. Vmware12安装centos系统详解
  13. robotframework的字符类型转换,用Evaluate来转换
  14. html-盒子模型及pading和margin相关
  15. 15.3-uC/OS-III资源管理(多值信号量)
  16. JVM GC-----4、finalize()方法
  17. js树形结构-----(BST)二叉树增删查
  18. 学习笔记3—matlab中load特殊用法
  19. GPLT L2-004 这是二叉搜索树吗?
  20. Oracle出现与并行相关的ORA-00600时的调查方法

热门文章

  1. LeetCode 162 Find Peak Element
  2. Java Static关键字详解
  3. taskkill批量删除进程命令
  4. Java研发岗位面试归类A(附答案)
  5. div不换行_div同行_div强制不换行
  6. JS根据经纬度获取地址信息
  7. ArrayList常用操作
  8. Python-基础数据类型
  9. Android Studio导入第三方类库的方法(转)
  10. YUV格式介绍