Elasticsearch8.x Spring Data and Spring Boot 3 尝鲜

在本教程中,我们将通过实际操作和实用的方式,探索使用 Spring Boot 进行 Elasticsearch 的基础知识。我们将学习如何使用 Spring Data Elasticsearch 模块创建索引、进行 CRUD 操作、搜索和查询 Elasticsearch 文档。我们还将看看如何在我们的 Spring 应用程序中记录 Elasticsearch 的请求和响应数据。

1. 介绍

Elasticsearch 是一个强大且广泛使用的开源搜索和分析引擎,基于 Lucene。它设计用于快速和近实时地存储、搜索和分析大量数据。

以下是 Elasticsearch 的一些关键功能:

  • 全文搜索: Elasticsearch 在全文搜索方面表现出色。它能够高效地索引和搜索大量非结构化或半结构化文本数据。

  • JSON 文档: Elasticsearch 中的数据以 JSON 文档的形式存储。每个文档存储在一个索引中,概念上类似于关系型数据库中的表。这使得 Elasticsearch 是无模式的,可以在没有预定义结构的情况下索引和搜索数据。

  • 查询: Elasticsearch 提供了丰富而灵活的查询语言,使我们能够执行从简单到复杂的搜索。我们可以使用各种查询类型(如术语查询、匹配查询、范围查询等)来过滤、聚合和排序数据。

  • 分析器和分词器: Elasticsearch 包含强大的文本分析功能,如分析器和分词器,可以将文本分解为令牌以实现高效的搜索和索引。它支持多种语言和自定义分析器。

2. Elasticsearch 环境搭建

参考第一篇文章

3. 创建项目和配置elasticsearch

3.1. Maven

添加spring-boot-starter-data-elasticsearch

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

3.2. Elasticsearch ClientConfiguration

Spring Data Elasticsearch 依赖于一个 Elasticsearch 客户端(由 Elasticsearch 客户端库提供),该客户端可以连接到单个 Elasticsearch 节点或集群。

Elasticsearch 客户端配置.

@Configuration
public class ImperativeElasticsearchConfig extends ElasticsearchConfiguration {@Overridepublic ClientConfiguration clientConfiguration() {return ClientConfiguration.builder().connectedTo("192.168.163.13:9200").withBasicAuth("elastic", "123456").build();}
}

在上述配置之后,我们可以将以下 bean 注入到其他 Spring 组件中:

import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import org.elasticsearch.client.RestClient;@Autowired
ElasticsearchOperations operations;@Autowired
ElasticsearchClient elasticsearchClient;@Autowired
RestClient restClient;         

注意: 我们应该使用 ElasticsearchOperations来与 Elasticsearch 集群交互。

当我们使用repositories时,底层使用的也是ElasticsearchOperations。

4. Document 相关的注解

Spring Data Elasticsearch 支持使用 Java 类作为可以映射到 Elasticsearch 文档的实体。这些类使用 @Document 注解,其字段使用 @Field 注解来映射到 Elasticsearch 字段。

在我们的演示中,我们将创建一个 Employee ,该doc具有诸如name和salary等属性,如下所示:

@Data
@Document(indexName = "employees", createIndex = true)
public class Employee {@Idprivate String employeeId;@Field(type = FieldType.Text, name = "name")private String name;@Field(type = FieldType.Long, name = "salary")private long salary;// setters and getters
}

现在,解释这些注解:

  • @Document – 应用在类级别,表示这个类是索引的mapping。

    • indexName – 存储此实体的索引名称。
    • createIndex标志决定是否在仓库引导时创建索引。默认值为 true。
  • @Id – 应用在字段级别,标记字段作为主键。

  • @Field – 应用在字段级别,定义字段的属性,如名称、类型、格式等。

5. Spring Data Elasticsearch APIs 分类说明

Spring Data Elasticsearch 提供了方便的抽象和模板,用于与 Elasticsearch 进行交互。它提供了高级抽象和数据访问方法,使我们无需直接处理底层 API。

  • ElasticsearchOperations (推荐)

    包含常见的辅助函数,其他方法已经被 移动到ElasticsearchOperations扩展的不同接口中。这些接口现在反映了 Elasticsearch 的 REST API 结构。

    • DocumentOperations 包含与保存或删除相关的函数。
    • SearchOperations 包含在 Elasticsearch 中进行搜索的函数。
    • IndexOperations 定义了在索引上操作的函数,如索引创建或映射创建。
  • ElasticsearchRepository: 是一个扩展了标准 Spring Data CrudRepository 的仓库接口。我们可以通过定义自定义方法和查询来创建自定义仓库。

  • ElasticsearchTemplate: 是一个高级 API,提供了各种与 Elasticsearch 交互的方法。它允许我们执行索引、查询和文档操作。

在后续部分,我们将深入探讨如何使用这些 API 的详细内容。

6. 使用 ElasticsearchOperations

完成必要的客户端配置后,我们可以将 ElasticsearchOperations bean 自动装配到服务类中,并使用其方法执行 CRUD 操作。

@Autowired private ElasticsearchOperations elasticsearchOperations;

5.1. 对doc的增删改查

我们可以使用传统的 save()get()delete() 方法来执行针对 Elasticsearch 文档的操作。

  • save() 操作具有 保存或更新语义
  • get() 方法从 Elasticsearch 索引中检索文档。要检索所需的文档,必须提供主键。
  • delete() 方法允许从索引中删除文档。
Employee employee = new Employee(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/38819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全网最全的TTS模型汇总,电商人、自媒体人狂喜

近日TTS语音模型在AI圈内热度不小&#xff0c;今天小编就来给大家做了个TTS模型汇总&#xff01; GPT-SoVITS&#xff08;AI 卖货主播大模型Streamer-Sales销冠用的TTS模型&#xff09; 模型简介&#xff1a;支持英语、日语和中文&#xff0c;零样本文本到语音&#xff08;TT…

【INTEL(ALTERA)】Nios II软件开发人员手册中设计位置的错误示例

目录 说明 解决方法 说明 Nios II软件开发人员手册正确无误 请参阅 Nios 中包含的Nios II硬件设计示例 II 嵌入式设计套件 &#xff08;EDS&#xff09;。提供设计示例 设计上 Altera网站的示例页面。 Nios II软件开发人员手册正确无误 请参阅 创建本应用程序和创建本 bsp …

Python UUID模块:深入理解与使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Atom CMS v2.0 SQL 注入漏洞(CVE-2022-25488)

前言 CVE-2022-25488 是一个发现于 Telesquare SDT-CW3B1 设备中的命令注入漏洞。这一漏洞可以被未经认证的远程攻击者利用&#xff0c;通过特殊构造的 HTTP 请求在设备上执行任意命令。以下是关于该漏洞的详细信息&#xff1a; 漏洞详细信息 漏洞编号: CVE-2022-25488影响范…

沃尔核材:价值重估

当英伟达这个曾经的GPU行业龙头&#xff0c;伴随AI的发展成为AI芯片架构的供应商时&#xff0c;他就跳出了原本行业的竞争格局&#xff0c;曾经还能与之一战的超威半导体被远远甩在身后&#xff0c;成为宇宙第一公司。 这说的就是一家公司价值的重估。今天给大家聊的也是这样一…

LIMS系统在汽车行业中的应用有哪些优势

LIMS实验室管理系统在汽车行业中的应用有诸多优势&#xff0c;这些优势不仅提升了实验室的管理效率&#xff0c;还确保了数据的准确性和可靠性&#xff0c;进而促进了汽车行业的整体发展。 一、提升管理效率 自动化数据处理 LIMS系统能够自动化处理大量数据&#xff0c;显著减…

Python层次密度聚类算法库之HDBSCAN使用详解

概要 HDBSCAN 是一种层次密度聚类算法,它通过密度连接性来构建聚类层次结构。与传统的 K-Means 算法相比,HDBSCAN 具有以下几个显著特点: 自动确定聚类数量:HDBSCAN 能够根据数据自动确定聚类数量,不需要预先指定。 适应噪声和异常点:HDBSCAN 在聚类过程中能够很好地处理…

后端之路(集合项目)——结合案例正式搭建项目

在前面学完java后端的Maven、spring boot、Mysql、Mybatis之后&#xff0c;我们现在就应该集合它们开始搭建一个项目试试手了 这里我还是跟着黑马程序员的步骤来走好每一步&#xff0c;也给各位讲清楚怎么弄 先看一下这个图&#xff0c;觉得太笼统不明白的话不着急&#xff0c…

Java面试题总结

Redis篇 什么是缓存穿透 ? 怎么解决 ? 缓存穿透是指查询一个不存在的数据&#xff0c;如果从存储层查不到数据则不写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到 DB 去查询&#xff0c;可能导致 DB 挂掉。这种情况大概率是遭到了攻击。 解决方案有两种&…

Arthas实战(2)- OOM问题排查

一、 准备测试应用 新建一个 SpringBoot应用&#xff0c;写一段有 OOM bug 的代码&#xff1a; RestController RequestMapping public class JvmThreadController {List<TestWrapper> memoryList new ArrayList<>();GetMapping("/test")public Strin…

mov文件怎么转换成mp4格式?这四种转换方法超级好用!

mov文件怎么转换成mp4格式&#xff1f;在数字娱乐的世界中&#xff0c;你是否曾遇到过MOV格式的视频&#xff1f;也许&#xff0c;对于许多人来说&#xff0c;这并不是一个常见的格式&#xff0c;但这并非偶然&#xff0c;首先&#xff0c;我们来谈谈MOV的兼容性问题&#xff0…

使用python做飞机大战

代码地址: 点击跳转

不看测评盲买花了多少冤枉钱..测评希喂、爱立方、帕特看完不踩雷

主食冻在挑选主食冻干时&#xff0c;许多宠物主人都会感到头疼。尽管主食冻干相较于普通猫粮具有诸多优势&#xff0c;但其价格也相对高昂。这导致许多宠物主人担心高价购买的主食冻干可能营养价值并不理想。然而&#xff0c;在选择时&#xff0c;我们还需要考虑其他重要因素&a…

“穿越时空的机械奇观:记里鼓车的历史与科技探秘“

在人类文明的发展历程中&#xff0c;科技的创新与进步不仅仅推动了社会的进步&#xff0c;也为我们留下了丰富的文化遗产。记里鼓车&#xff0c;作为一种古老的里程计量工具&#xff0c;其历史地位和技术成就在科技史上具有重要的意义。本文将详细介绍记里鼓车的起源、结构原理…

0基础学C++ | 第10天 | 基础知识 |程序的内存模型 | 4大分区

前言 第9天是一个通讯录管理系统案例&#xff0c;现在了解程序的内存分区&#xff0c;C程序在执行时&#xff0c;将内存大方向分为了4个区域&#xff0c;分别是代码区、全局区、栈区、堆区&#xff0c;分区的目的就是为了更加灵活的编程。 代码区 and 全局区&#xff08;程序…

Echarts柱状图x轴刻度间隔显示不全/x轴文字倾斜

此情况一般是因为x轴文字过长导致&#xff0c;知道什么原因&#xff0c;就可以解决了 在xAxis里面加 xAxis: {axisLabel: {interval: 0,rotate: -45 //文字过多时&#xff0c;倾斜角度}} 控制它的属性是axisLabel&#xff0c;该属性interva设置成0则表示强制显示所有标签&a…

这所985院校不保护一志愿,18人不合格被刷!西北农林科技大学计算机考研考情分析!

西北农林科技大学(Northwest A&F University)&#xff0c;简称“西农”或“西北农林”&#xff0c;始创于1934年&#xff0c;位于中华人民共和国陕西省杨凌示范区。1999年9月11日由同处杨凌的原西北农业大学、西北林学院、中国科学院水利部水土保持研究所、水利部西北水利科…

外籍学员报到,四川眼科医院开启国际屈光手术专科医生培训

“能够来到中国、来到四川眼科医院学习&#xff0c;我真的很幸运&#xff01;”这个夏天&#xff0c;对于马来西亚眼科医生Ivan Cheng En Yoo来说&#xff0c;充满了期待和挑战。他是首位来到四川眼科医院进修学习的马来西亚籍医生&#xff0c;Ivan Cheng将在周进院长的带领下&…

Android Gradle 开发与应用 (三): 依赖管理与版本控制

目录 1. 依赖管理的重要性 1.1 依赖的类型 1.2 Gradle 中的依赖声明 2. 版本控制的策略 2.1 固定版本与动态版本 2.2 版本冲突的解决 3. Gradle 插件的使用 3.1 常用的 Gradle 插件 3.2 自定义插件 4. 多模块项目中的依赖管理 4.1 模块间依赖 4.2 公共依赖 5. 依赖…

用“文心一言”写的文章,看看AI写得怎么样?

​零售连锁店的“支付结算”业务设计 在数字化浪潮的推动下&#xff0c;连锁店零售支付结算的设计愈发重要。一个优秀的支付结算设计不仅能够提升用户体验&#xff0c;还能增强品牌竞争力&#xff0c;进而促进销售增长。 本文将围绕一个具体的连锁店零售支付结算案例&#xf…