SpringBoot : ch10 整合Elasticsearch

news2024/11/28 6:48:30

前言

欢迎阅读本文,本文将介绍如何在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 {

    @Id
    private 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
 @Autowired
    private ElasticsearchRestTemplate template;

    /**
     * 创建索引
     */
    @Test
    void 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
 /**
     * 删除索引
     */
    @Test
    void 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
     */
    @Test
    void 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、创建文档
 /**
     * 创建文档
     */
    @Test
    void 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 搜索
     */
    @Test
    void 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.coloradmin.cn/o/1266802.html

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

相关文章

sqli-labs靶场详解(less1-less10)

目录 less-1 less-2 less 3 less 4 less 5 less-6 less-7 less-8 less-9 less-10 1-10关代码分析 less-1 判断注入点 ?id1 正常 ?id1 报错&#xff1a;to use near 1 ?id1\ 报错&#xff1a;to use near 1\ ?id1 and 11 正常 ?id1 and 11 报错&#xff1a;to …

Debian10安装VMware Tools

一、原系统 首先我在界面按CTRLALTT和CTRLSiftT都没有反应&#xff0c;没关系&#xff0c;我有办法 系统版本 管理员用户 步骤一&#xff1a;打开VMware Tools文件 步骤二、将文件复制到自己熟悉的文件内 步骤三、命令行查看文件是否复制成功存在 步骤四、解压VMware-tools…

一款具有MID认证的单相电表ADL200,可用于光伏逆变器监测,那么这款表尺寸跟参数有哪些呢?

概述 ADL200 单相电子式电能表主要用于计量低压网络的单相有功电能&#xff0c;同时可测量电压、电流、功率等电量&#xff0c; 并可选配 RS485 通讯功能&#xff0c;方便用户进行用电监测、集抄和管理。可灵活安装于配电箱内&#xff0c;实现对不同区域和不 同 负 荷 的 分 项…

Qt右键菜单+动作+qss案例

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//设置界面颜色样式this->setStyleSheet("background-color:rgb(54,54,54)");//创建文件菜单QMenu *fileMenuItems new QMenu;//菜单添加iconfileMenuItems->se…

JavaWeb后端数据库MySQL的使用

JavaWeb MySQLSQL数据库设计 多表设计1对多1对1多对多 多表查询连接查询内连接外连接左外连接右外连接 子查询事务索引 MySQL MySQL数据模型 关系型数据库&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。 SQL SQL&#xff1a;操作关系型数…

丽晶酒店及度假村打造绮丽之境“美食实验室”中国市场首秀

于重庆丽晶酒店以艺术与美食的碰撞演绎“对比之美”&#xff0c;感官之华 2023年11月28日&#xff0c;中国上海 ——基于对当下消费趋势的敏锐洞察&#xff0c;洲际酒店集团旗下奢华品牌丽晶酒店及度假村近年来不断焕新&#xff0c;以崭新形象缔造现代奢华的旅居体验。作为丽晶…

多线程【第二十章】

线程简介 世间有很多工作都是可以同时完成的。例如&#xff0c;人体可以同时进行呼吸、血液循环、思考问题等活动;用户既可以使用计算机听歌&#xff0c;也可以使用它打印文件。同样&#xff0c;计算机完全可以将多种活动同时进行&#xff0c;这种思想放在 Java 中被称为并发&a…

基于若依的ruoyi-nbcio流程管理系统增加流程节点配置(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 上一节把数据库与相关基础数据字典准备好&#xff0c;下面就来实现相应的功能&#xff0c;目前先针对自定义…

Python语言学习笔记之五(Python代码注解)

本课程对于有其它语言基础的开发人员可以参考和学习&#xff0c;同时也是记录下来&#xff0c;为个人学习使用&#xff0c;文档中有此不当之处&#xff0c;请谅解。 注解与注释是不一样的&#xff0c;注解有更广泛的应用&#xff1b; 通过注解与注释都能提高代码的可读性和规…

探索三种生成模型:基于DDPMs、NCSNs和SDEs方法的Diffusion

探索三种生成模型&#xff1a;基于DDPMs、NCSNs和SDEs方法的Diffusion 去噪扩散概率模型&#xff08;DDPMs&#xff09;正向过程反向过程 噪声条件得分网络&#xff08;NCSNs&#xff09;正向过程初始化训练 NCSNs生成样本 反向过程 随机微分方程&#xff08;SDEs&#xff09;原…

2 线、3 线和 4 线 RTD 配置之间有什么区别?

电阻温度检测器 (RTD) 是温度传感器的一种&#xff0c;由于其准确性、可重复性和稳定性而广泛应用于各种工业应用。这些设备通过感测材料温度变化时电阻的变化来测量温度。 RTD 探头有多种配置&#xff0c;包括 2 线、3 线和 4 线型号。这些类型之间存在显着差异&#xff0c;在…

【古月居《ros入门21讲》学习笔记】08_发布者Publisher的编程实现

目录 说明&#xff1a; 1. 话题模型 图示 说明 2. 实现过程&#xff08;C&#xff09; 创建功能包 创建发布者代码&#xff08;C&#xff09; 配置发布者代码编译规则 编译并运行 编译 运行 3. 实现过程&#xff08;Python&#xff09; 创建发布者代码&#xff08;…

双音多频的通信(数字信号处理实验3)

&#xff08;1&#xff09;从数字信号处理的角度分析双音多频通信&#xff0c;查阅资料了解双音多频通信的原理及工作过程&#xff0c;总结在实验报告中。 &#xff08;2&#xff09;了解DTMF接收信号时&#xff0c;离散傅立叶变化的过程。 &#xff08;3&#xff09;在程序中改…

电力智能化系统(智能电力综合监控系统)

电力智能化系统是一个综合性的系统&#xff0c;它利用物联网、云计算、大数据、人工智能等技术&#xff0c;依托电易云-智慧电力物联网&#xff0c;采用智能采集终端和物联网关&#xff0c;将电力设备、用电负荷、电力市场等各个环节有机地联系起来&#xff0c;实现了对电力配送…

sqli-labs靶场详解(less25/25a-less28/28a)

在SQL注入过程中难点就是判断注入点 只要注入点确定了 获取数据库数据的过程就是复制 从这关开始 只进行判断注入点了和代码逻辑分析了 因为注入操作太简单了&#xff08;不演示了&#xff09; 目录 less-25 less-25a less-26 less-26a less-27 less-27a less-28 less-…

vue使用echarts中国地图

需求&#xff1a;Vue3 vite TS 项目内使用 Echarts 5 绘制中国地图。鼠标悬浮省份上面显示指定的数据&#xff0c;地图支持缩放和拖拽的功能&#xff0c;页面放大缩小支持自适应&#xff0c;window.addEventListener(‘resize’, resize); 添加防抖动函数debounce。 一、安装…

房屋租赁出售经纪人入驻小程序平台

一款专为房屋中介开发的小程序平台&#xff0c;支持独立部署&#xff0c;源码交付&#xff0c;数据安全无忧。 核心功能&#xff1a;房屋出租、经纪人独立后台、分佣后台、楼盘展示、房型展示、在线咨询、地址位置配套设施展示。 程序已被很多房屋交易中介体验使用过&#x…

操作系统校招知识点总结

文章目录 前言1. 操作系统概述1.1 操作系统的四大特征&#xff08;并共虚异&#xff09;1.2 操作系统的主要功能&#xff1f;1.3 动态链接库和静态链接库的区别&#xff1f;1.4 并发和共享之间的关系&#xff1f;1.5 中断和异常的概念&#xff1f; 2. 进程与线程2.1 进程和线程…

台灯怎么选对眼睛好?适合考研使用的护眼台灯推荐

现在晚上仍然需要工作、学习的人有很多&#xff0c;这样的一件事似乎已经成为“家常便饭”&#xff0c;尤其事对于一些学生党而言。每天都有写不完的作业、做不完的功课&#xff0c;这样高强度的用眼下来&#xff0c;容易导致眼睛疲劳、近视等等。很多人会选择在夜晚的时候使用…

基于Java SSM框架+Vue实现房屋租赁网站项目【项目源码+论文说明】

基于java的SSM框架Vue实现房屋租赁网站演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;房屋租赁系统当然也不能排除在外。房屋租赁系统是以实际运用为开发背景&…