Elasticsearch之Dynamic Mapping

本文我们介绍ES的Dynamic Mapping(动态mapping)

  • es可以自动识别文档字段类型,从而降低用户的使用成本,如下图所示:
    图-1
  • es对字段类型的自动识别是依靠JSON文档的字段类型来实现自动识别字段的类型,支持类型如下:
JSON类型 es类型
null 忽略
boolean boolean
浮点类型 float
整数 long
object object
array 由第一个非null值类型决定
string 1.匹配为日期则设为date类型(默认开启)2.匹配为数字的话设为float或long类型(默认关闭),以上两种不满足最后会设为text类型,并附带keyword的子字段

我们可以通过如下方式验证es的自动识别
图-2
图-3
  • 日期的自动识别可以自行配置日期格式的,以满足各种需求
    图-4

    自定日期的识别格式如下
    图-5
    关闭日期自动识别机制如下
    图-6
  • 字符串是数字时,默认是不会自动识别为整型,因为字符串中出现数字是完全合理的

     - numeric_detection可以开启字符串中数字的自定识别,如下图所示:
    图-7
  • Dynamic Templates(动态模板),允许根据es自动识别的数据类型、字段名等来动态设定
      - 所有字符串类型都设定为keyword类型,即默认不分词,哪些字段需要分词我们再单独设置
      - 所有以message开头的字段都设定为text类型,即分词
      - 所有以long_开头的字段都设定为long类型
      - 所有自动匹配为double类型的都设定为float类型,可以节省空间

    API如下
    图-8

    匹配规则一般又如下几个参数:
      - match_mapping_type匹配es自动识别的字段类型,如boolean,long,string等
      - match,unmatch 匹配字段名
      - path_match,path_unmatch 匹配路径
    将字符串默认使用keyword类型(es默认会为字符串设置为text类型,并增加一个keyword的子字段),设置如下:
    图-9

    将以message开头的字段都设置为text类型,设置如下
    图-10
    将double类型的设定为float,节省空间,设定如下
    图-11
  • 自定义Mapping的操作步骤如下:
     1. 写入一条文档到es临时索引中,获取es自动生成的mapping
     2. 修改步骤1得到的mapping,自定义相关配置
     3.使用步骤2的mapping创建实际所需的索引
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容