text类型,支持全文搜索,因为text涉及分词,所以可以配置使用什么分词器,尤其涉及中文分词,这些涉及全文搜索的内容
实际项目中,如果不需要模糊搜索的字符类型,可以选择keyword类型,例如:手机号、email、微信的openid等等,如果选text类型,可能会出现搜出一大堆相似的数据,而且不是精确的数据。
dynamic mapping:没有预先定义文档的映射(数据类型),也可以插入数据,因为ES默认会自动检测我们插入的数据的类型,相当于自动定义文档类型(mapping)。自动映射的缺点就是会出现ES映射的数据类型,不是我们想要的类型,例如:手机号,我们希望是一个精确值,使用keyword类型,ES映射成为了text类型,这就不符合业务预期了。
Mapping | Elasticsearch Guide [8.15] | Elastic
ElasticSearch Mapping的数据类型和参数介绍 - 唐浩荣 - 博客园
| 一级分类 | 二级分类 | 具体类型 |
|---|---|---|
| 核心类型 | 字符串类型 | |
| 整数类型 | integer,long,short,byte | |
| 浮点类型 | double,float,half_float,scaled_float | |
| 逻辑类型 | boolean | |
| 日期类型 | date | |
| 范围类型 | range(Integer_range,long_range,date_range...) | |
| 二进制类型 | binary (BASE64 的二进制) | |
| 复合类型 | 数组类型 | array |
| 对象类型 | object | |
| 嵌套类型 | nested | |
| 地理类型 | 地理坐标类型 | geo_point |
| 地理地图 | geo_shape | |
| 特殊类型 | IP类型 | ip |
| ... | ... | ... |
字符串类型
从ElasticSearch 5.x开始不再支持string,由text和keyword类型替代:
总结:对text类型的字段,会先使用分词器分词,生成倒排索引,用于之后的搜索。对keyword类型的字段,不会分词,搜索时只能精确查找
关于text类型的常用参数: