之前说 Type 可以理解为关系型数据库的 Table,那每个字段的数据类型是如何定义的
呢?
实际上每个 Type 中的字段是什么数据类型,由 mapping 定义,如果我们在创建 Index
的时候,没有设定 mapping,系统会自动根据一条数据的格式来推断出该数据对应的字段
类型,具体推断类型如下:
➢
true/false → boolean
➢
1020 → long
➢
20.1 →
float
➢
“2018-02-01” → date
➢
“hello world” → text +keyword
默认只有 text 会进行分词,keyword 是不会分词的字符串。mapping 除了自动定义,
还可以手动定义,
但是只能对新加的、没有数据的字段进行定义,一旦有了数据就无法再做
修改了。
5.6.1 基于中文分词搭建索引-自动定义 mapping
➢
直接创建 Document
这个时候 index 不存在,建立文档的时候自动创建 index,同时 mapping 会自动定义
![](https://img-blog.csdnimg.cn/20210719113439267.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NvbmdfcXVhbl8=,size_16,color_FFFFFF,t_70)
➢
查看自动定义的 mapping
![](https://img-blog.csdnimg.cn/20210719113521171.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NvbmdfcXVhbl8=,size_16,color_FFFFFF,t_70)
➢
查询测试
![](https://img-blog.csdnimg.cn/20210719113748136.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NvbmdfcXVhbl8=,size_16,color_FFFFFF,t_70)
➢
分析结论
上面查询“海行”命中了三条记录,是因为我们在定义的 Index 的时候,没有指定分
词器,使用的是默认的分词器,对中文是按照每个汉字进行分词的。
5.6.2 基于中文分词搭建索引-手动定义 mapping
➢
定义 Index,指定 mapping
![](https://img-blog.csdnimg.cn/20210719114008464.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NvbmdfcXVhbl8=,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20210719114111126.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NvbmdfcXVhbl8=,size_16,color_FFFFFF,t_70)
➢ 向 Index 中放入 Document
➢
查看手动定义的 mapping
![](https://img-blog.csdnimg.cn/20210719114720411.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NvbmdfcXVhbl8=,size_16,color_FFFFFF,t_70)
➢
查询测试
![](https://img-blog.csdnimg.cn/20210719115306924.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NvbmdfcXVhbl8=,size_16,color_FFFFFF,t_70)
➢
分析结论
上面查询没有命中任何记录,是因为我们在创建 Index 的时候,指定使用 ik 分词器进行分