Elasticsearch字段类型与类型区别
基础类型
Elasticsearch自带的数据类型是Lucene索引的依据,也是我们做手动映射调整的依据。
映射中主要就是针对字段设置类型以及类型相关参数。即主要是针对数据的格式限制与搜索时的对应类型的匹配方式
常用类型
比较常用的基本类型的:
- 字符串: string
常用
(5.x版本被废弃),替换为text,keyword - 数字: byte,short,integer,long,float,double
- 时间: date
常用
- 布尔(boolean): true,false
- 数组: array
- 对象: object
非常用类型
- 数字: half_float ,scaled_float
- 经纬度: geo_point
- 网络地址: ip
- 范围类型: long_range,integer_range,double_range,float_range,date_range,ip_range
- 二进制: binary
可能存在不全,可留言补充
类型解释
字符串类型text与keyword区别
主要区别在于分词。
text | keyword |
---|---|
分词后进行匹配 | 直接进行完全匹配 |
得到关联的内容 | 只能获得完全匹配的内容 |
数字类型
储存位数与精度区别:
类型 | 描述 |
---|---|
byte | 8位存储 |
short | 16位存储 |
integer | 32位存储 |
long | 64位存储 |
float | 32位单精度存储 |
double | 64位双精度存储 |
时间类型
- ES中date类型会存在时区问题,解决方法是:
统一入数据时的格式不要带有UTC等字母后缀,如何存在跨时区那就一定要带有时区后缀。即统一入数据格式。
- data类型在入数据时存在格式校验,格式不对或在创建索引字段时指定的格式中
不包含
对应格式,就会出现数据无法录入情况。
布尔(boolean)
仅允许存入true
与false
数组
没有具体的类型限制,但要求内部存储的类型必须一致。所以使用map存储时,注意value的类型一致
在不是数组类型中存储数组
会在进行字段匹配查询中单独匹配,如字段text:['123','456']
进行匹配text字段时,text:123
或text:456
将会命中。
并且会转换为数组类型,但是mapping中的类型不受影响。
对象
由于对象描述比较复杂,我发现有一篇博客不错,可以去看一下。跳转