ElasticSearch 学习笔记 Mapping相关内容概述
ES学习笔记-Mapping概述
文章目录
什么是Mapping
- Mapping 类似数据库中的schema的定义,作用如下
- 定义索引中的字段的名称
- 定义字段的数据类型,例如字符串,数字,布尔……
- 字段,倒排索引的相关配置,(Analyzed or Not Analyzed,Analyzer)
- Mapping 会把JSON文档映射成Lucene所需要的扁平格式
- 一个Mapping 属于一个索引的Type
- 每个文档都属于一个Type
- 一个Type 有一个Mapping定义
- 7.0开始,不需要在Mapping定义中指定type信息
字段的数据类型
- 简单类型
- Text/Keyword
- Date
- Integer/Floating
- Boolean
- IPv4&IPv6
- 复杂类型-对象和嵌套对象
- 对象类型/嵌套类型
- 特殊类型
- geo_point & geo_shape/percolator
什么是Dynamic Mapping
在写入文档时候,如果索引不存在,
会自动创建索引
-
Dynamic Mapping的机制,使得我们无需手动定义Mappings。
-
Elasticsearch 会自动根据文档信息,推算出字段的类型
-
但是有时候会推算的不对,例如地理位置信息
-
当类型如果设置不对时,会导致一些功能无法正常运行,例如Range 查询
类型自动识别规则
能否更改Mapping 的字段类型
-
两种情况
-
新增加字段
-
Dynamic设为true时,一旦有新增字段的文档写入,Mapping也同时被更新
-
Dynamic 设为false,Mapping不会被更新,新增字段的数据无法被索引,但是信息会出现在_source中
-
Dynamic设置成 Strict,文档写入失败
-
-
对已有字段,一旦已经有数据写入,就不再支持修改字段定义
- Lucene 实现的倒排索引,一旦生成后,就不允许修改
-
如果希望改变字段类型,必须ReindexAPl,重建索引
-
-
原因
-
如果修改了字段的数据类型,会导致已被索引的数据无法被搜索
-
但是如果是增加新的字段,就不会有这样的影响
-
控制 Dynamic Mapping
显式Mapping 设置与常见参数介绍
设置mapping字段常用属性
analyzer
在索引时和搜索时都应该用于文本字段的分析器(除非被 search_analyzer 覆盖)。默认为默认索引分析器或标准分析器。
boost
分数的倍数,默认1.0,可接受浮点数,可通过设置该值提高该列的相关性计算得分,可以使用查询时该字段携带boost
实现相同的效果
index
index-控制当前字段是否被索引。默认为true。如果设置成false,该字段不可被搜索