ElasticSearch(一)数据类型

ElasticSearch(一)数据类型

1.简述

Es数据类型分为基础数据类型和复杂类型数据,掌握ES数据类型才能进一步使用ES检索数据内容。

复制代码
      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            <version>2.7.7</version>
        </dependency>

2.基础类型

2.1.String类型

  • text:会被分词处理,用于全文检索,很少用于聚合处理(需要设置fielddata属性),不能用于排序
  • keyword:不可分词,用于精确搜索,过滤、排序、聚合等操作

1分期细粒度

在ES中存在三种模式的分词:Ik(ik_smart 、 ik_max_word)、standard(es自带的)。如果我们不指定分词模式,则默认会执行standard,语句被拆分成一个一个字。而ik_max_word是最细粒度的拆分,也是ik默认的,ik_smart是做最粗粒度的拆分。

举个最简单的例子,对于"进口红酒",三种拆分分别是:

standard:进、口、红、酒

ik_smart:进口、红酒

ik_max_word:进口、口红、红酒

2java中映射

使用String类型,需要通过@Field指定String具体类型,analyzer指定分词细粒度

复制代码
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String context;

2.2.Number类型

数字类型有如下分类:

类型 说明
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类型字段时候应当尽可能选择范围小的数据类型, 字段的长度越短, 索引和搜索的效率越高;优先考虑使用带缩放因子的浮点类型

1.Date类型

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

2.java中映射

复制代码
    @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;

2.4.Boolean类型

  • 真值,表示真值的有true,"true", "on", "yes", "1"
  • 假值,表示假值的有false, "false", "off", "no", "0", "", 0.0, 0

3.复杂类型

3.1.object-对象类型

对象类型:针对单个json文档 ;

1.扁平化处理

复制代码
PUT example/docs/1
{
    "region": "CN",
    "manager": {
        "age": 22,
        "name": {
            "first": "李",
            "last": "小明"
        }
    }
}

用平面的结构可以用如下的来表示。

复制代码
{
  "region":            "CN",
  "manager.age":        32,
  "manager.name.first": "李",
  "manager.name.last":  "小明"
}

2.java中映射

复制代码
    @Field(type = FieldType.Object)
    private File file;

@Data
public class FileEntity {
    private String fileName;
    private String url;

}

3.2.nested嵌套类型

用于存储json对象数组嵌套类型

Nested (嵌套)类型,是特殊的对象类型,特殊的地方是索引对象数组方式不同,允许数组中的对象各自地进行索引。目的是对象之间彼此独立被查询出来。

1.扁平化处理

复制代码
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" ]
}

2.java中映射

复制代码
    /**
     * 采购需求书下载(文件列表)
     */
    @Field(type = FieldType.Nested)
    private List<FileEntity> files;
相关推荐
唐兴通个人5 小时前
人工智能Deepseek医药AI培训师培训讲师唐兴通讲课课程纲要
大数据·人工智能
梦里不知身是客115 小时前
spark读取table中的数据【hive】
大数据·hive·spark
赞奇科技Xsuperzone7 小时前
DGX Spark 实战解析:模型选择与效率优化全指南
大数据·人工智能·gpt·spark·nvidia
努力成为一个程序猿.7 小时前
Flink集群部署以及作业提交模式详解
大数据·flink
努力成为一个程序猿.7 小时前
【Flink】FlinkSQL-动态表和持续查询概念
大数据·数据库·flink
更深兼春远8 小时前
Spark on Yarn安装部署
大数据·分布式·spark
DolphinScheduler社区8 小时前
真实迁移案例:从 Azkaban 到 DolphinScheduler 的选型与实践
java·大数据·开源·任务调度·azkaban·海豚调度·迁移案例
zhangkaixuan4569 小时前
Apache Paimon 写入流程
java·大数据·apache·paimon
Elastic 中国社区官方博客10 小时前
通过混合搜索重排序提升多语言嵌入模型的相关性
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索