一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情。
Elasticsearch 系列文章
前言
在上一篇,我们在 Windows 中快速部署了 Elasticsearch + Kibana(7.8.0)。
部署的最终目的,当然是学习了,所以这一篇,我们将 Elasticsearch 集成到 Spring 项目中,进行简单的增删查改,方便我们后续的学习和验证。
查看版本依赖关系
首先我们要查看版本依赖关系,不能说我们部署了 Elasticsearch7.8.0,到头来给他整一个 Spring Boot 1.5.X,属实是配错了。
在官网中,可以找到版本关系表:
我们看到并没有 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 的依赖。
将 Spring Boot 版本修改为 2.4.0,最后 Pom 文件如下:
启动项目
在 application.yml 中配置 Elasticsearch 实例的地址,如果你跟我一样在本地启动,甚至都不需要做这一步配置,直接启动项目即可。
当然,启动项目前,不要忘记启动 Elasticsearch 实例,在这个示例中,我在本地先启动了 Elasticsearch 和 Kibana,都是 7.8.0 版本,如果你还没有相应的环境,你可以看看这篇:((20220402144654-5tglsa7 'Elasticsearch 系列(一):Elasticsearch 单节点环境搭建(基于7.8.0)'))。
运行 Application.java。
出现类似日志代表启动成功了。
测试
我们先创建一个实体类,稍后创建几个实例直接保存到 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 里面看一下:
完美集成!
写在最后
我是 Java 雏鸡开发,我的宗旨是写出实用的、能够复用的文章,希望在你需要的时候,这篇文章能帮助你,避免踩坑。
最后,关注收藏不迷路,一键三连真的酷!