Es数据类型分为基础数据类型和复杂类型数据,掌握ES数据类型才能进一步使用ES检索数据内容。
org.springframework.boot
spring-boot-starter-data-elasticsearch
2.7.7
在ES中存在三种模式的分词:Ik(ik_smart 、 ik_max_word)、standard(es自带的)。如果我们不指定分词模式,则默认会执行standard,语句被拆分成一个一个字。而ik_max_word是最细粒度的拆分,也是ik默认的,ik_smart是做最粗粒度的拆分。
举个最简单的例子,对于“进口红酒”,三种拆分分别是:
standard:进、口、红、酒
ik_smart:进口、红酒
ik_max_word:进口、口红、红酒
使用String类型,需要通过@Field指定String具体类型,analyzer指定分词细粒度
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String context;
数字类型有如下分类:
类型 | 说明 |
---|---|
byte | 有符号的8位整数, 范围: [-128 ~ 127] |
short | 有符号的16位整数, 范围: [-32768 ~ 32767] |
integer | 有符号的32位整数, 范围: [−231 ~ 231-1] |
long | 有符号的64位整数, 范围: [−263 ~ 263-1] |
float | 32位单精度浮点数 |
double | 64位双精度浮点数 |
half_float | 16位半精度IEEE 754浮点类型 |
scaled_float | 缩放类型的的浮点数, 比如price字段只需精确到分, 57.34缩放因子为100, 存储结果为5734 |
设置Number类型字段时候应当尽可能选择范围小的数据类型, 字段的长度越短, 索引和搜索的效率越高;优先考虑使用带缩放因子的浮点类型
Date类型在Elasticsearch中以数值形式(long类型)存储。文档在索引Date类型数据时候,会根据format选项来指定日期格式,Elasticsearch默认解析ISO 8601格式字符串。format选项有:
格式化的日期字符串
比如yyyy-MM-dd格式的,2020-01-01,还有ISO8601格式的2020-01-01T05:04:03Z
毫秒数
比如1584930153000
秒数
比如1584930153
多种格式混合
多个格式使用双竖线||分隔,每个格式都会被依次尝试, 直到找到匹配的,比如yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis
@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime;
对象类型:针对单个json文档 ;
PUT example/docs/1
{
"region": "CN",
"manager": {
"age": 22,
"name": {
"first": "李",
"last": "小明"
}
}
}
用平面的结构可以用如下的来表示。
{
"region": "CN",
"manager.age": 32,
"manager.name.first": "李",
"manager.name.last": "小明"
}
@Field(type = FieldType.Object)
private File file;
@Data
public class FileEntity {
private String fileName;
private String url;
}
用于存储json对象数组嵌套类型
Nested (嵌套)类型,是特殊的对象类型,特殊的地方是索引对象数组方式不同,允许数组中的对象各自地进行索引。目的是对象之间彼此独立被查询出来。
PUT my_index/_doc/1
{
"group" : "fans",
"user" : [
{
"first" : "John",
"last" : "Smith"
},
{
"first" : "Alice",
"last" : "White"
}
]
}
// user 字段被es默认设置为object类型
在es内部,该json对象会被转换为如下文档。
{
"group" : "fans",
"user.first" : [ "alice", "john" ],
"user.last" : [ "smith", "white" ]
}
/**
* 采购需求书下载(文件列表)
*/
@Field(type = FieldType.Nested)
private List files;