SpringBoot : ch10 整合Elasticsearch

这篇具有很好参考价值的文章主要介绍了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、新建项目,结构如下
ceph spring boot,springboot,spring boot,elasticsearch,后端,logback 
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)运行结果:

ceph spring boot,springboot,spring boot,elasticsearch,后端,logback

 2)使用 Postman 查看索引

ceph spring boot,springboot,spring boot,elasticsearch,后端,logback

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)运行结果

ceph spring boot,springboot,spring boot,elasticsearch,后端,logback

  2)使用 Postman 查看索引

ceph spring boot,springboot,spring boot,elasticsearch,后端,logback

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

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)运行结果
ceph spring boot,springboot,spring boot,elasticsearch,后端,logback
2)使用 Postman 查看mapping

ceph spring boot,springboot,spring boot,elasticsearch,后端,logback

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)运行结果

ceph spring boot,springboot,spring boot,elasticsearch,后端,logback

2)使用 Postman 查看文档

ceph spring boot,springboot,spring boot,elasticsearch,后端,logback

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)运行结果
ceph spring boot,springboot,spring boot,elasticsearch,后端,logback 
2)使用 Postman 根据 ID 查看文档 

ceph spring boot,springboot,spring boot,elasticsearch,后端,logback

 

六、使用 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的集成上。文章来源地址https://www.toymoban.com/news/detail-774202.html

到了这里,关于SpringBoot : ch10 整合Elasticsearch的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring security - 快速整合 springboot

    2024年02月10日
    浏览(45)
  • JAVA-10-[SpringBoot]整合JUnit和MyBatis

    SpringBoot测试失败并报错: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration 1.2.1 启动类MyApplication.java 1.2.2 测试类MyApplicationTests 核心配置:数据库连接相关信息(连什么?连谁?什么权限?) 映射配置:SQL映射(XML/注解) 1、导入对应starter 2、配置相关信息 2.4.1 实体类

    2023年04月08日
    浏览(38)
  • 【RabbitMQ】4 Spring/SpringBoot整合RabbitMQ

    spring-amqp 是对AMQP的一些概念的一些抽象, spring-rabbit 是对RabbitMQ操作的封装实现。 主要有几个核心类 RabbitAdmin 、 RabbitTemplate 、 SimpleMessageListenerContainer 等。 RabbitAdmin 类完成对Exchange,Queue,Binding的操作,在容器中管理了 RabbitAdmin 类的时候,可以对Exchange,Queue,Binding进行自

    2024年01月22日
    浏览(43)
  • 消息队列——spring和springboot整合rabbitmq

    目录 spring整合rabbitmq——生产者 rabbitmq配置文件信息 倒入生产者工程的相关代码 简单工作模式 spring整合rabbitmq——消费者 spring整合rabbitmq——配置详解 SpringBoot整合RabbitMQ——生产者  SpringBoot整合RabbitMQ——消费者   使用原生amqp来写应该已经没有这样的公司了 创建两个工程

    2024年02月16日
    浏览(54)
  • SpringBoot整合Spring Security实现权限控制

    要对Web资源进行保护,最好的办法莫过于Filter 要想对方法调用进行保护,最好的办法莫过于AOP。 Spring Security进行认证和鉴权的时候,就是利用的一系列的Filter来进行拦截的。 如图所示,一个请求想要访问到API就会从左到右经过蓝线框里的过滤器,其中 绿色部分是负责认证的

    2024年02月15日
    浏览(38)
  • Spring Security入门教程,springboot整合Spring Security

    Spring Security是Spring官方推荐的认证、授权框架,功能相比Apache Shiro功能更丰富也更强大,但是使用起来更麻烦。 如果使用过Apache Shiro,学习Spring Security会比较简单一点,两种框架有很多相似的地方。 目录 一、准备工作 创建springboot项目 pom.xml application.yml 二、创建相关的类

    2024年02月05日
    浏览(50)
  • SpringBoot整理-Spring Boot配置

    Spring Boot 的配置系统是其核心功能之一,旨在简化 Spring 应用的配置过程。Spring Boot 提供了一种灵活的方式来配置你的应用,无论是通过外部配置文件,环境变量,命令行参数还是在代码中直接配置。以下是关于 Spring Boot 配置的几个重要方面: 配置文件 application.prop

    2024年01月25日
    浏览(55)
  • 【Spring Boot】SpringBoot 单元测试

    单元测试(unit testing),是指对软件中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试。 1、可以⾮常简单、直观、快速的测试某⼀个功能是否正确。 2、使⽤单元测试可以帮我们在打包的时候,发现⼀些问题,因为在打包之前,所以的单元测试必须通过,否则不能打包

    2024年02月07日
    浏览(57)
  • 【Spring】SpringBoot整合MybatisPlusGernerator,MybatisPlus逆向工程

       📝个人主页:哈__ 期待您的关注  在我们写项目的时候,我们时常会因为需要创建很多的项目结构而头疼。项目中的表很多的时候,我们连实体类都创建不完,这时候就需要我们的逆向工程来帮助我们生成我们的框架结构。这些结构都差不多,实体类,表现层,业务层和

    2024年04月15日
    浏览(49)
  • springboot整合spring cloud gateway搭建网关服务

    spring cloud netflix zuul、spring cloud gateway是最常见的微服务网关,通过网关,我们可以在请求到达后端指定服务之前/后端服务处理完业务响应数据之后对响应进行对请求/响应进行处理。 比如常见的参数校验、接口鉴权等等,在后端服务的拦截器和过滤器能做的事在网关都可以做

    2024年02月07日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包