SpringBoot : ch10 整合Elasticsearch

前言

欢迎阅读本文,本文将介绍如何在Spring Boot应用程序中整合Elasticsearch。随着信息量的不断增加,对数据的高效管理和检索变得尤为重要。Elasticsearch作为一个强大的开源搜索和分析引擎,为我们提供了一个灵活且高效的解决方案。

在本文中,我们将深入探讨如何在Spring Boot项目中集成Elasticsearch,包括配置Elasticsearch连接、索引的创建和搜索功能的实现。无论您是正在寻找一种新的数据存储和检索解决方案,还是想要了解如何将Elasticsearch与您的Spring Boot应用程序集成,本文都将为您提供宝贵的知识和技巧。

一、为什么要使用SpringBoot整合Elasticsearch?

使用Spring Boot整合Elasticsearch有以下几个重要原因:

  1. 强大的搜索和分析功能:Elasticsearch是一个强大的开源搜索和分析引擎,具有快速、可扩展和高效的搜索功能。它支持全文搜索、模糊搜索、聚合和过滤等多种查询操作,可以帮助我们轻松实现复杂的搜索需求。此外,Elasticsearch还提供了丰富的分析功能,可以对数据进行聚合、统计和可视化,帮助我们深入理解数据。

  2. 高性能和可伸缩性:Elasticsearch是基于分布式架构的,可以轻松地水平扩展以处理大规模数据和高并发请求。它使用倒排索引和分片技术来优化搜索性能,并通过自动化和智能的负载均衡来提高系统的可伸缩性。这使得Elasticsearch成为处理大量数据和高并发场景下的首选解决方案。

  3. 简化的开发和集成:Spring Boot是一个快速构建Java应用程序的框架,它提供了许多开箱即用的功能和约定,使得开发更加简单和高效。通过使用Spring Boot整合Elasticsearch,我们可以利用Spring Data Elasticsearch模块提供的简单而强大的API,以及自动化的配置和集成,快速地构建出具有搜索和分析能力的应用程序。

  4. 生态系统支持:Spring Boot和Elasticsearch都是非常流行和广泛采用的技术,在开发过程中可以获得丰富的社区支持和资源。无论是官方文档、教程、示例代码还是第三方库,都可以帮助我们更好地理解和使用这些技术。

综上所述,使用Spring Boot整合Elasticsearch可以让我们轻松地利用强大的搜索和分析功能,提高性能和可伸缩性,并享受简化的开发和集成过程。这使得它成为构建现代应用程序的理想选择。

 

二、前期准备

1、新建项目,结构如下
 
2、导入依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>11</source><target>11</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>edu.nf.ch09.Ch09Application</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>

这是一个基本的Maven配置文件示例,用于使用Spring Boot整合Elasticsearch。

<dependencies>中,你需要添加以下依赖项:

  1. spring-boot-starter-data-elasticsearch:这是Spring Boot提供的用于集成Elasticsearch的starter依赖。
  2. lombok:这是一个用于简化Java代码的工具库,在使用实体类时可以减少冗余代码。
  3. spring-boot-starter-test:这是Spring Boot提供的用于单元测试的starter依赖。

<dependencyManagement>中,你需要添加spring-boot-dependencies的依赖项,它用于管理Spring Boot相关的依赖版本。

<build>中,你需要配置Maven插件来编译和打包项目。其中包括:

  1. maven-compiler-plugin:这个插件用于配置Java编译器的版本、编码方式等。
  2. spring-boot-maven-plugin:这个插件用于将项目打包为可执行的JAR文件,并指定主类。<skip>true</skip>意味着在执行mvn package命令时跳过运行Spring Boot应用程序。

请注意,${spring-boot.version}是一个变量,你需要在<dependencies><plugins>中定义它的值。

 

三、配置yml

spring:elasticsearch:# 指定连接的主机地址接口uris: http://127.0.0.1:9200# 连接超时时间connection-timeout: 2s# 账号密码
#    username: xxx
#    password: xxx

Spring Boot的配置文件中配置了Elasticsearch的连接信息

 

四、新建一个Elasticsearch实体类


@Document(indexName = "users",createIndex = false)
@Mapping
@Data
public class User {@Idprivate String id;@Field(type = FieldType.Keyword)private String name;@Field(type = FieldType.Integer)private Integer age;@Field(type = FieldType.Text,analyzer = "ik_max_word")private String birthplace;}
  • @Document注解指定了与该类映射的Elasticsearch索引的名称为userscreateIndex属性设置为false表示在初始化时不创建该索引。
  • @Mapping注解用于指示Spring Data Elasticsearch在映射该实体类到Elasticsearch索引时要应用的自定义映射规则,这里没有具体指定。
  • @Data注解是Lombok库提供的,用于自动生成Java Bean的常规方法(如gettersettertoString等)。

另外,还使用了一些字段注解来对实体类的各个属性进行描述:

  • @Id注解标记了id字段作为Elasticsearch文档的唯一标识符。
  • @Field注解用于指定该属性在Elasticsearch索引中的字段类型和其他属性。例如,name字段被标记为FieldType.Keyword类型,age字段被标记为FieldType.Integer类型,birthplace字段被标记为FieldType.Text类型,并且使用ik_max_word分词器进行分词。

五、 测试

1、创建 index
 @Autowiredprivate ElasticsearchRestTemplate template;/*** 创建索引*/@Testvoid testCreateIndex() {// 如果不存在则创建索引if (!template.indexOps(User.class).exists()){template.indexOps(User.class).create();log.info("成功");}else {log.info("失败");}}

是一个使用 Spring Data Elasticsearch 操作 Elasticsearch 的示例代码。@Autowired 注解用于注入一个 ElasticsearchRestTemplate 的实例,它是 Spring Data Elasticsearch 提供的 Elasticsearch 模板类,可以用于执行 Elasticsearch 操作。

在这个示例代码中,testCreateIndex() 方法用于创建一个索引。如果 User 类所对应的索引不存在,则使用 ElasticsearchRestTemplate 创建一个新的索引;否则输出“失败”并不执行任何操作。其中,template.indexOps(User.class) 用于获取 User 类所对应的 IndexOperations 对象,它提供了创建、删除、查询索引等操作的方法。

1)运行结果:

 2)使用 Postman 查看索引

2、删除index
 /*** 删除索引*/@Testvoid testCreateDelete() {// 如果存在则删除索引if (template.indexOps(User.class).exists()){template.indexOps(User.class).delete();log.info("成功");}else{log.info("失败");}}

 该方法通过template.indexOps(User.class)获取到与User类映射的Elasticsearch索引操作对象,然后调用exists()方法检查该索引是否存在。如果该索引存在,则调用delete()方法删除该索引,并打印日志信息“成功”;否则打印日志信息“失败”。

1)运行结果

  2)使用 Postman 查看索引

当删除索引后就不能够查到这个索引了,证明我们的代码是没有写错的。 

3、为 index 创建 mapping
 /*** 创建Mapping*/@Testvoid testCreateMapping(){Document mapping = template.indexOps(User.class).createMapping();template.indexOps(User.class).putMapping(mapping);}

该方法通过template.indexOps(User.class)获取到与User类映射的Elasticsearch索引操作对象,然后调用createMapping()方法创建该类的Mapping,并将结果保存在mapping变量中。接着,调用putMapping(mapping)方法将Mapping应用到索引中。

Mapping是Elasticsearch中描述文档结构的定义,包括字段类型、分词器等信息。通过创建Mapping,可以明确指定每个字段的数据类型、分析器等属性,以便更好地支持搜索和分析操作。

1)运行结果
2)使用 Postman 查看mapping

4、创建文档
 /*** 创建文档*/@Testvoid testCreateDoc(){User user = new User();user.setId("1");user.setName("qiu");user.setAge(22);user.setBirthplace("珠海市香洲区北园新村二期");IndexCoordinates indexCoordinates = IndexCoordinates.of("users");template.save(user,indexCoordinates);}

该方法首先创建了一个User对象,并设置了对象的各个属性值。然后,通过IndexCoordinates.of("users")创建了一个表示索引的IndexCoordinates对象,指定了要保存文档的索引名称为"users"。最后,调用template.save(user, indexCoordinates)方法将该User对象保存到指定的索引中。

这样就成功地创建了一个名为"users"的索引,并在该索引中保存了一个名为"1"的文档,该文档包含了用户的各个属性信息。

1)运行结果

2)使用 Postman 查看文档

5、 根据 id 查询文档信息
/*** 根据 id 搜索*/@Testvoid testSearchUserById(){User user = template.get("1", User.class);log.info(user.toString());}

该方法通过template.get("1", User.class)根据文档的ID来搜索Elasticsearch中的文档,并将结果保存在user对象中。随后,通过日志输出打印了用户信息。

这样就成功地根据ID在Elasticsearch中进行了文档的搜索,并获取到了相应的文档数据。

1)运行结果
 
2)使用 Postman 根据 ID 查看文档 

 

六、使用 SpringBoot 整合 Elasticsearch 的好多?

Spring Boot提供了很好的支持来简化与Elasticsearch的整合。它提供了Spring Data Elasticsearch模块,使得与Elasticsearch的交互更加方便和高效。下面是一些使用Spring Boot整合Elasticsearch的好处:

  1. 简化配置:Spring Boot通过自动配置大大简化了与Elasticsearch的连接和设置过程。只需在配置文件中指定相关属性,Spring Boot会自动为你创建Elasticsearch客户端。

  2. 提供注解驱动的开发:Spring Data Elasticsearch模块通过注解驱动的方式,让你可以使用类似于JPA的注解来标记实体类,无需编写复杂的查询语句,就可以进行CRUD操作。

  3. 集成查询DSL:Spring Data Elasticsearch提供了强大的查询DSL(Domain Specific Language),可以轻松地构建复杂的查询语句,支持全文搜索、范围查询、聚合查询等功能。

  4. 支持事务管理:Spring Boot整合了Spring的事务管理机制,可以确保在与Elasticsearch的交互中保持数据的一致性和完整性。

  5. 提供监控和健康检查:Spring Boot集成了Actuator模块,可以方便地对Elasticsearch进行监控和健康检查,包括对索引、节点、查询性能等方面的监控。

总之,Spring Boot提供了一套简化、高效的方式来整合Elasticsearch,使得与Elasticsearch的交互变得更加便捷和灵活。这使得开发人员能够更专注于业务逻辑而不必花费过多精力在与Elasticsearch的集成上。

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

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

相关文章

泛微 E-Office sample权限绕过+文件上传组合漏洞Getshell

0x01 产品简介 泛微E-Office是一款标准化的协同 OA 办公软件&#xff0c;泛微协同办公产品系列成员之一,实行通用化产品设计&#xff0c;充分贴合企业管理需求&#xff0c;本着简洁易用、高效智能的原则&#xff0c;为企业快速打造移动化、无纸化、数字化的办公平台。 0x02 漏…

c++|类与对象(中)

目录 一、类的6个默认成员函数 二、构造函数 2.1概念 2.2七大特性 三、析构函数 3.1概念 3.2特性 四、拷贝构造函数 4.1概念 4.2特性 五、赋值运算符重载 5.1运算符重载 5.2赋值运算符重载 5.3前置和后置重载 六、const成员函数 七、取地址及const取地址操作符重…

详解Object.defineProperty()方法

Object.defineProperty是一个用于定义或修改对象属性的方法。它提供了一种更底层和灵活的方式来定义属性&#xff0c;可以设置属性的配置&#xff08;如可枚举性、可配置性、可写性等&#xff09;&#xff0c;并且可以定义属性的getter和setter函数。 语法&#xff1a; Objec…

【开题报告】基于卷积神经网络的图像脑部MRI图像分割

论文题目 基于卷积神经网络的图像脑部MRI图像分割 一、选题意义 1.课题研究的目的和意义 1.1选题目的 脑部疾病是高致残致死率的疾病之一&#xff0c;对人们的生活质量和生命安全都有着十分重大的影响&#xff0c;所以各个国家都开始对脑部疾病的研究重视起来。帕金森、脑胶质…

SEO工具-免费功能最全的5款SEO工具

随着互联网的蓬勃发展&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为许多企业和个人网站必备的关键技能。然而&#xff0c;对于初学者或者运营小型网站的人来说&#xff0c;使用专业的SEO工具可能涉及较高的成本。在这篇文章中&#xff0c;我们将向您推荐五款高…

印刷企业建设数字工厂管理系统的工作内容有哪些

随着科技的不断进步&#xff0c;数字工厂管理系统在印刷企业中的应用越来越广泛。这种系统可以有效地整合企业内外资源&#xff0c;提高生产效率&#xff0c;降低生产成本&#xff0c;并为印刷企业提供更好的业务运营与管理模式。本文将从以下几个方面探讨印刷企业建设数字工厂…

Microsoft Office Exce-筛选后的公式批量复制粘贴为值 并且不乱数据

Microsoft Office Exce-利用选择性粘贴将筛选后的公式结果批量转换为值 1、写好【客单价】公式&#xff0c;并下拉填充 &#xff08;【SKU】、【销售额】、【销售量】这三列都是常量&#xff0c;非公式&#xff09; 2、复制客单价公式到E列 3、筛选数据&#xff0c; 按 Delet…

cpu飙升问题排查以及解决

1、查看内存占用排行 top -c 2、查看服务器内存使用情况 free -h 3、查看文件夹磁盘空间大小 Linux 查看各文件夹大小命令du -h --max-depth1 (1)查看文件目录一级目录磁盘空间 du -h --max-depth1 (2&#xff09;查看指定文件目录 du sh home --max-depth2 4、Linux下…

数据库系统概述之国产数据库

当今世界&#xff0c;数据已成为重要的生产要素&#xff0c;数据库管理系统更是广泛应用于信息化行业各领域&#xff0c;国内数据库产业能否健康可持续的发展&#xff0c;在很大程度上影响着国民经济发展和网络空间安全。 当前&#xff0c;国产数据库行业竞争非常激烈&#xf…

解析生效探测方法

linux dig命令 1.最常用的查询命令 dig baidu.com2 . 根据记录类型进行查询&#xff0c;比如MX&#xff0c;CNAME&#xff0c;NS&#xff0c;PTR等&#xff0c;只需将类型加在命令后面即可。 dig a.shifen.com ns3 . 指定域名DNS服务器测试解析是否生效的命令&#xff0c;以…

基于单片机的烟雾检测报警装置(论文+源码)

1.系统设计 &#xff08;1&#xff09;利用传感器实现环境中温度、烟雾浓度的实时检测&#xff1b; &#xff08;2&#xff09;系统检测的各项数据信息通过液晶模块进行显示&#xff0c;提高设计可视化&#xff1b; &#xff08;3&#xff09;系统可以根据实际情况利用按键模…

sqli-labs(6)

27. 过滤了union和select 使用双写绕过 有报错信息使用报错注入 1and(extractvalue(1,concat(0x5c,database())))and11 1and(updatexml(1,concat(0x7e,database(),0x7e),1))and11 1and(extractvalue(1,concat(0x5c,(selseselectlectect(group_concat(table_name))from(inform…