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 {

    @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的集成上。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>