Elasticsearch Mapping设置相关
一、什么是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定义
- 修改后使用该配置创建自己的索引
- 删除临时索引
相关文章