「Elasticsearch 系列(三)」- Spring 集成 Elasticsearch 实战

331 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情

Elasticsearch 系列文章

前言

在上一篇,我们在 Windows 中快速部署了 Elasticsearch + Kibana(7.8.0)。

部署的最终目的,当然是学习了,所以这一篇,我们将 Elasticsearch 集成到 Spring 项目中,进行简单的增删查改,方便我们后续的学习和验证。

查看版本依赖关系

首先我们要查看版本依赖关系,不能说我们部署了 Elasticsearch7.8.0,到头来给他整一个 Spring Boot 1.5.X,属实是配错了。

在官网中,可以找到版本关系表:

image.png

我们看到并没有 Elasticsearch 7.8.0 版本的依赖行,那是不是就不兼容了?并不是,就像是修伞匠常说的,我们得试一把。

我们就选 7.9.3 那一行的依赖版本试试,我们只能往高了选,而不能往低了选。

那么我们决定了依赖:

  • Elasticsearch 7.8.0
  • Spring Boot 2.4.X
  • Spring Data Elasticsearch 4.1.X

创建项目

我们实用 Spring Initializr 创建一个 Spring Boot 项目。Spring Boot 版本我们暂时默认就好,等会直接在 Pom 文件中修改,记得勾选 Elasticsearch 的依赖。

image.png

image.png

将 Spring Boot 版本修改为 2.4.0,最后 Pom 文件如下:

image.png

启动项目

在 application.yml 中配置 Elasticsearch 实例的地址,如果你跟我一样在本地启动,甚至都不需要做这一步配置,直接启动项目即可。

当然,启动项目前,不要忘记启动 Elasticsearch 实例,在这个示例中,我在本地先启动了 Elasticsearch 和 Kibana,都是 7.8.0 版本,如果你还没有相应的环境,你可以看看这篇:((20220402144654-5tglsa7 'Elasticsearch 系列(一):Elasticsearch 单节点环境搭建(基于7.8.0)'))。

image.png

运行 Application.java

image.png

出现类似日志代表启动成功了。

测试

我们先创建一个实体类,稍后创建几个实例直接保存到 Elasticsearch 中,再测试查询是否正常。

创建一个简单的 Student 类:

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "student")
public class Student {
    @Id
    @Field(type = FieldType.Keyword)
    private String id;

    @Field(type = FieldType.Keyword)
    private String name;

    @Field(type = FieldType.Keyword)
    private Integer age;
}

创建一个 Repository,用于控制程序和 Elasticsearch 的交互:

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface StudentRepository extends ElasticsearchRepository<Student, String> {
}

创建一个 Controller,用来测试。

@RestController
public class TestController {
    @Resource
    private StudentRepository studentRepository;
  
    @GetMapping("/test")
    public void test() {
        Student student1 = new Student("1", "张三", 18);
        Student student2 = new Student("2", "李四", 18);
        Student student3 = new Student("3", "王五", 18);

        studentRepository.save(student1);
        studentRepository.save(student2);
        studentRepository.save(student3);

        studentRepository.findById("1");
        System.out.println(studentRepository.findById("1"));
    }
}

重启项目,调用接口 http://localhost:8080/test。

输出:

Optional[Student(id=1, name=张三, age=18)]

证明信息已经成功被存入 Elasticsearch,可以进行正常的索引操作了。

再来 Kibana 里面看一下:

image.png

完美集成!

写在最后

我是 Java 雏鸡开发,我的宗旨是写出实用的、能够复用的文章,希望在你需要的时候,这篇文章能帮助你,避免踩坑。

最后,关注收藏不迷路,一键三连真的酷!