Elasticsearch Mapping设置相关

2020-06-03 00:00:00 索引 修改 字段 写入 类型

一、什么是Mapping

Mapping类似数据库中的schema的定义,作用如下

  • 定义索引中的字段的名称
  • 定义字段的数据类型,例如字符串,数字,布尔....
  • 字段,倒排索引的相关配置,(Analyzed or Not Analyzed,Analyzer)

Mapping会把JSON文档映射成Lucene所需要的扁平模式

二、Mapping的数据类型

1.简单类型

  • Text/Keyword
  • Date
  • Integer/Floating
  • Boolean
  • IPv4&IPv6

2.复杂类型-对象和嵌套对象

  • 对象类型/嵌套类型

3.特殊类型

  • geo_point&geo_shape/percolartor

三、Dynamic Mapping

1.写入文档时候,如果索引不存在,会自动创建索引

2.Dynamic Mapping的机制,使得我们无需手动定义Mappings。Elasticsearch会自动根据文档信息推算出字段的类型

3.有时候会推算的不对,例如地理位置信息

4.当类型如果设置不对时,会导致一些功能无法正常运行,例如Range查询。



四、修改Mapping的字段类型

1.新增加字段

  • Dynamic设为true时,一旦有新增字段的文档写入,Mapping也会同事被更新
  • Dynamic设为false,Mapping不会被更新,新增字段的数据无法被索引,但是信息会出现在_source中
  • Dynamic设置成strict,文档写入失败

2.对已有字段,一旦已经有数据写入,就不在支持修改字段定义

  • Lucene实现的倒排索引,一旦生成后,就不允许修改

3.如果希望修改字段类型,必须Reindex API,重建索引

  • 因为如果修改了字段的数据类型,会导致已被索引的无法被搜索
  • 但是如果是新增加的字段,就不会有这样的影响

五、自定义Mapping的方法

1.参考API手册,纯手写

2.也可以按照以下步骤

  • 创建一个临时的index,写入一些样本数据
  • 通过访问Mapping API获得该临时文件的动态Mapping定义
  • 修改后使用该配置创建自己的索引
  • 删除临时索引

相关文章