1.es中的mapping
类似数据库中的表结构定义,主要作用如下:
定义Index下的字段名称(Field Name)。
定义字段的类型,比如数值型、字符型、布尔型等。
定义倒排索引相关的配置,比如是否索引、是否记录position位置等。
查询指定Index的mapping
![](https://img-blog.csdnimg.cn/img_convert/5c72c664bfc8ed1a6ef5269430bddc00.jpeg)
2.自定义mapping
![](https://img-blog.csdnimg.cn/img_convert/044027631800f7c397753115ee711e47.jpeg)
mapping中的字段类型一旦设定后,禁止直接修改,原因如下:
Lucene实现的倒排索引生成后不允许修改。
允许新增字段
通过dynamic参数来控制字段的新增。
true(默认)允许自动新增字段。
false不允许自动新增字段,但是文档可以正常写入,但无法对字段进行查询操作。
strict,文档不能写入,报错。
3.copy_to参数
将字段的值复制到目标字段。
不会出现在source中,只用来搜索。
实例如下:
修改my_index的mapping,设置copy_to参数。
![](https://img-blog.csdnimg.cn/img_convert/eccb36e5df8e121bd6ea13649b54f849.jpeg)
创建文档
![](https://img-blog.csdnimg.cn/img_convert/003c8f74eecdc8df216c6d095e09cc5e.jpeg)
根据full_name进行查询
![](https://img-blog.csdnimg.cn/img_convert/aa18ab8dffbe99cc7eef8498d2501d8f.jpeg)
返回:
![](https://img-blog.csdnimg.cn/img_convert/1324387b402f9f305536bac41bdfee84.jpeg)
4.index参数
控制当前字段是否索引,默认为true,即记录索引,false不记录,即不可搜索。使用场景不需要做查询的字段或者敏感信息字段,例如:手机号、身份证等,可以节省部分空间。
![](https://img-blog.csdnimg.cn/img_convert/297923b6dbe103057d33e8128f9a3a24.jpeg)
5.index options参数
index options用来控制倒排索引记录的内容,有如下4中配置:
docs只记录doc id。
freqs记录doc id和term frequencies。
positions记录doc id、term frequencies和term position。
offsets记录doc id、term frequencies、term position和character offsets。
text类型默认配置为positions。
记录内容越多占用空间越大。
![](https://img-blog.csdnimg.cn/img_convert/30f7fb112df8f2bbb144bb294adae23c.jpeg)
6.null value设置
当字段遇到null时的处理策略,默认为null,此时es会忽略该值,可以通过设定该值来给字段设置默认值。
7.数据类型
核心数据类型
字符串类型text、keyword。
数值类型long、integer、short、byte、double、float、half_float、scaled_float。
日期类型date。
布尔类型boolean。
二进制类型binary。
范围类型integer_range、float_range、long_range、double_range、date_range。
复杂数据类型
数组类型array。
对象类型object。
嵌套类型nested object。
地理位置数据类型
geo_point
geo_shape
专用类型
记录ip地址ip。
实现自动补全completion。
记录分词术token_count。
记录字符串hash值murmur3。
percolator。
join。
多字段特性-multi-fields
允许对同一个字段采用不同的配置,比如分词,常见例子:通过拼音搜索人名。通常的做法是增加一个pinyin的字段,拼音搜索时使用该字段。但是这种方法不太优雅改变了原有的文档结构。
推荐的做法时对人名字段增加一个子字段,这种方案需要一个“pinyin”分词器,将汉字转化为拼音。
![](https://img-blog.csdnimg.cn/img_convert/7e9255da064aa9c064d03745ef3adfe1.jpeg)
8.Dynamic mapping
es可以自动识别文档字段类型,从而降低用户使用成本。如下所示:
![](https://img-blog.csdnimg.cn/img_convert/d91704c25cb20d53a12c370d84784ca8.jpeg)
es是依靠json文档的字段类型来实现自动识别字段类型,支持类型如下:
![](https://img-blog.csdnimg.cn/img_convert/aff85979e506c97a255219f7cffd0be7.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/2df549ec457c81876a9fe2054d1e5af4.jpeg)
8.Dynamic mapping
允许根据es自动识别的数据类型、字段名来动态设定字段类型,可以实现如下效果:
所有字符串类型都设定为keyword类型,即默认不分词。
所有以message开头的字段都设置为text类型,即分词。
所有以long开头的字段都设置为long类型。
所有自动匹配为double类型的都设置为float,以节省空间。
![](https://img-blog.csdnimg.cn/img_convert/414d9b0c3d6071575f77438855b00a46.jpeg)
当有多个匹配规则共存时,优先级别时从上到下,匹配到某一个规则就结束。
匹配规则一般有如下几个参数:
match_mapping_type匹配es自动识别的字段类型,如boolean、long、string等。
match、unmatch匹配字段名称。
path_match、path_unmatch匹配路径。
字符串默认使用keyword类型
es会默认为字符串设置为text类型,并增加一个keyword字段。
![](https://img-blog.csdnimg.cn/img_convert/4b742ce6ae3d95fc4e60f4c1fd401ded.jpeg)
以message开头的设置为text
![](https://img-blog.csdnimg.cn/img_convert/273ced810401c92d9884ac0a4edd30e6.jpeg)
es匹配到doube类型设置为float,以节省空间
![](https://img-blog.csdnimg.cn/img_convert/37e9d76bec3dcfe532177f359cb1c16b.jpeg)
9.自定义mapping的建议
自定义mapping的操作步骤如下
写一条文档到es的临时索引中,获取es自动生成的mapping。
修改步骤a得到的mapping,自定义相关配置。
使用步骤b的mapping创建实际所需索引。
来源:
https://coding.imooc.com/learn/list/181.html
官方地址:
https://www.elastic.co/guide/en/elasticsearch/reference/6.0/_basic_concepts.html