Spring Data Elasticsearch篇(1):常用注解

2023-11-10

1、注解@Document

1.1、@Document源码

@Persistent
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Document {
    //索引库名称
    String indexName();
    //类型
    String type() default "";
    //
    boolean useServerConfiguration() default false;
    //默认分片数5
    short shards() default 5;
    //默认副本数1
    short replicas() default 1;
    //刷新间隔
    String refreshInterval() default "1s";
    //索引文件存储类型
    String indexStoreType() default "fs";
   //是否创建索引
    boolean createIndex() default true;
}

1.2、@Document注解使用

@Document注解作用在类上,标记实体类为文档对象,常用属性如下:

(1)indexName:对应索引库名称;

(2)type:对应在索引库中的类型;

(3)shards:分片数

(4)replicas:副本数;

2、注解@Field

2.1、@Field源码

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
@Inherited
public @interface Field {
    //自动检测属性类型
    FieldType type() default FieldType.Auto;
    //
    boolean index() default true;
    //时间类型的字段格式化
    DateFormat format() default DateFormat.none;
    //
    String pattern() default "";
    //默认情况下不存储
    boolean store() default false;
    //
    boolean fielddata() default false;
    //指定字段使用搜索时的分词
    String searchAnalyzer() default "";
    //
    String analyzer() default "";
    //如果某个字段需要被忽略
    String[] ignoreFields() default {};
    //
    boolean includeInParent() default false;
}

2.2、枚举类FieldType

【FieldType源码】

public enum FieldType {
    Text,
    Integer,
    Long,
    Date,
    Float,
    Double,
    Boolean,
    Object,
    Auto,
    Nested,
    Ip,
    Attachment,
    Keyword;

    private FieldType() {
    }
}

2.3、@Field注解使用

@Field作用在成员变量,标记为文档的字段,并制定映射属性;

(1)@Id:作用在成员变量,标记一个字段为id主键;一般id字段或是域不需要存储也不需要分词;

(2)type:字段的类型,取值是枚举,FieldType;

(3)index:是否索引,布尔值类型,默认是true;

(4)store:是否存储,布尔值类型,默认值是false;

(5)analyzer:分词器名称

【 @Field(type = FieldType.Keyword)和 @Field(type = FieldType.Text)区别

      在早期elasticsearch5.x之前的版本存储字符串只有string字段;但是在elasticsearch5.x之后的版本存储了Keyword和Text,都是存储字符串的。FieldType.Keyword存储字符串数据时,不会建立索引;而FieldType.Text在存储字符串数据的时候,会自动建立索引,也会占用部分空间资源。

【 @Field(store = true)】

其实不管我们将store值设置为true或false,elasticsearch都会将该字段存储到Field域中;但是他们的区别是什么?

(1)store = false时,默认设置;那么给字段只存储在"_source"的Field域中;

(2)store = true时,该字段的value会存储在一个跟_source平级的独立Field域中;同时也会存储在_source中,所以有两份拷贝。

那么我们在什么样的业务场景下使用store field功能?

(1)_source field在索引的mapping 中disable了。这种情况下,如果不将某个field定义成store=true,那些将无法在返回的查询结果中看到这个field。
(2)_source的内容非常大。这时候如果我们想要在返回的_source document中解释出某个field的值的话,开销会很大(当然你也可以定义source filtering将减少network overhead),比例某个document中保存的是一本书,所以document中可能有这些field: title, date, content。假如我们只是想查询书的title 跟date信息,而不需要解释整个_source(非常大),这个时候我们可以考虑将title, date这些field设置成store=true。
      需要注意的是,看起来将field store可以减少查询的开销,但其实这样也会加大disk的访问频率。假如你将_source中的10个field都定义store,那么在你查询这些field的时候会将会有10次disk seek的操作。而返回_source只有一次disk seek的操作。所以这个也是我们在定义的时候需要blance的。

3、实体类代码

@Document(indexName = "item",type = "docs",shards = 1,replicas = 0)
public class Item {
    @Id
    private Long id;
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String title;
    @Field(type=FieldType.Keyword)
    private String category;
    @Field(type=FieldType.Keyword)
    private String brand;
    @Field(type=FieldType.Double)
    private Double price;
    @Field(index = false,type = FieldType.Keyword)
    private String images;
}

【注意】(1)@Field(index=true)表示是否索引,如果是索引表示该字段(或者叫域)能能够搜索。

(2)@Field(analyzer="ik_max_word",searchAnalyzer="ik_max_word")表示是否分词,如果是分词就会按照分词的单词搜索,如果不是分词就按照整体搜索。

(3)@Field(store=true)是否存储,也就是页面上显示。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data Elasticsearch篇(1):常用注解 的相关文章

  • sql中对日期的筛选

    转载自 点击打开链接 几个小时内的数据 DATE SUB NOW INTERVAL 5 HOUR 今天 select from 表名 where to days 时间字段名 to days now 昨天 SELECT FROM 表名 WHE
  • Flutter —— dart基础语法

    Flutter dart基础语法 1 Flutter 项目创建 2 Dart 语法 2 1 var final和const 2 2 num 2 3 string 2 4 list 和 map 2 5 和 2 6 方法 和 箭头函数 2 7
  • 刚面完的字节跳动Python软件测试用例编写(含思路)

    测试用例编写是软件测试的基本技能 也有很多人认为测试用例是软件测试的核心 软件测试中最重要的是设计和生成有效的测试用例 测试用例是测试工作的指导 是软件测试的必须遵守的准则 在这里我们不讨论以上的各种观点 但是综上所述 大家可以看出 测试用
  • QT中的connect用法总结

    第一种 首先来看看老版本的 connect 写法 比较复杂些 需要将信号和槽进行明确的指定 包括形参 看一个示例 为方便演示 先自定义一个 Button 然后定义两个重载的信号 lass MyButton public QWidget Q
  • 仓库 “https://download.docker.com/linux ubuntu Release” 没有 Release 文件。N: 无法安全地用该源进行更新,所以默认禁用该源

    解决 E 仓库 https download docker com linux ubuntu Release 没有 Release 文件 N 无法安全地用该源进行更新 所以默认禁用该源 在ubuntu16 04上安装Docker Engin
  • CentOS 7 修改系统运行级别(单用户/正常启动)

    常用的系统运行级别 3级 带网络多用户命令行界面 multi user target 5级 带网络多用户图像化界面 graphical target 正常启动的系统使用systemctl命令修改运行级别 查看当前运行级别 systemctl
  • [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍

    前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索 Eastmount 关键字及截图的功能 而这篇文章主要简单介绍如何实现自动登录163邮箱 同时继续介绍Selenium Python官网Locating
  • MySQL中的事务

    1 事务介绍 本篇文章我们来介绍数据库中事务的概念以及如何使用MySQL命令行窗口来进行数据库的事务操作 事务是联合操作中我们数据库稳定运作和数据不发生不可预知错误的重要依赖 事务是指数据库中的一组逻辑操作 这个操作的特点就是在该组逻辑中
  • STM32-时钟系统

    1 时钟的定义 时钟是单片机运行的基础 时钟信号推动单片机内各个部分执行相应的指令 时钟系统就是CPU的脉搏 决定cpu速率 像人的心跳一样 只有有了心跳 人才能做其他的事情 而单片机有了时钟 才能够运行执行指令 才能够做其他的处理 点灯
  • 数学建模——BP神经网络学习笔记

    一 BP神经网络简述 人工神经元概述 归纳一下生物神经元传递信息的过程 生物神经元是一个多输入 单输出单元 常用的人工神经元模型可用下图模拟 当神经元j有多个输入xi i 1 2 m 和单个输出yj时 输入和输出的关系可表示为 其中j为阈值
  • 5.4结构型模式—————装饰模式

    装饰模式的定义与特点 装饰 Decorator 模式的定义 指在不改变现有对象结构的情况下 动态地给该对象增加一些职责 即增加其额外功能 的模式 它属于对象结构型模式 装饰 Decorator 模式的主要优点有 采用装饰模式扩展对象的功能比
  • flash读写 STM32G070 HAL库 STM32CubeMX

    flash读写 STM32G070 HAL库 STM32CubeMX 1 程序通过串口写入及读写数据 通过printf打印输出 注 这里不讲解printf 的设置 2 写入数据代码 HAL StatusTypeDef flash write
  • Mybatis————Gitee中检出项目到myeclipse

    1 在gitee中新建仓库 2 在myeclipse中 import git 输入 创建好的 仓库的地址 就是上图中的 克隆 下载 那个地方的地址 然后输入 gitee的用户名密码 点击next 找到你本地的路径 next 导入一个新的ma
  • 高斯过程回归预测Matlab简单实现

    0 说在前面的话 如果是新手入门高斯过程回归的话建议先读这篇博客才能更好理解下面的程序哟 快速入门高斯过程回归预测 1 单点预测例题 主程序 clear close all 求解程序 x 1 5 1 0 75 0 4 0 25 0 输入测量
  • moviepy音视频开发:audio_normalize调整剪辑音量大小到正常

    前往老猿Python博文目录 概述 audio normalize函数用于将一个剪辑的音量大小调整到正常 调整的思路就是将剪辑中音频帧数据的最大值取出来 当其值小于1时 表示剪辑的音量偏小 以1为参考 将所有剪辑帧数据的值都乘以1和剪辑帧数
  • 代码重构与单元测试——测试项目(二)

    二 创建测试项目 我们已经创建了充电宝计费项目 做为我们这次重构的遗留系统 为了验证我们每次重构的正确性 我们需要一个测试项目 对我们重构的代码进行测试 接下来我们来创建这个测试项目 1 在Visual Studio 2019的 解决方案资
  • 解决无法使用gpt的问题

    1 此方法是前提你得有一台服务器之后的操作 2 地区不支持 错误代码1020可以用此方法解决 脚本地址 wget N no check certificate https gitlab com rwkgyg CFwarp raw main
  • 浏览器渲染原理

    浏览器渲染原理 渲染时间点 渲染流水线 解析 HTML Parse HTML 解析 HTML Parse HTML Document Object Model 1 解析 HTML Parse HTML CSS Object Model 解析

随机推荐