Spring Boot如何集成Elasticsearch?

本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
前言
在这篇文章中,我们将探讨如何将Elasticsearch与Spring Boot应用集成。Elasticsearch是一个开源的搜索引擎,通常用于实现全文搜索和实时数据分析。它广泛应用于日志分析、搜索引擎、数据挖掘等场景。通过Spring Boot与Elasticsearch的集成,开发者可以轻松实现分布式搜索和数据分析功能。
一、什么是Elasticsearch?
Elasticsearch是一个分布式的RESTful搜索和分析引擎,适用于处理结构化、半结构化和非结构化数据。它基于Apache Lucene构建,并提供了强大的全文搜索能力和近实时的数据分析功能。Elasticsearch通常与Logstash(用于数据处理)和Kibana(用于数据可视化)一起使用,组成ELK栈(Elasticsearch, Logstash, Kibana)。
Elasticsearch的特点包括:
- 分布式存储:支持水平扩展,可以处理海量数据。
- 实时查询:提供近实时的搜索和分析能力。
- 高可用性:通过数据分片和副本机制确保数据的高可用性。
- 全文搜索:强大的文本分析和全文搜索能力,支持分词和模糊匹配。
️ 二、在Spring Boot应用中集成Elasticsearch
2.1 添加Elasticsearch的依赖
为了将Elasticsearch与Spring Boot集成,我们首先需要添加相关的依赖。Spring提供了spring-boot-starter-data-elasticsearch
,它是Spring Data Elasticsearch的封装,简化了与Elasticsearch的集成。
添加Maven依赖
在pom.xml
文件中添加以下依赖:
<dependencies>
<!-- Spring Boot Starter for Elasticsearch -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
</dependencies>
这个starter会自动为你配置所需的Elasticsearch连接和相关配置。
2.2 配置Elasticsearch连接
接下来,我们需要在application.properties
或application.yml
文件中配置Elasticsearch的连接信息,包括Elasticsearch服务器的地址、端口等。
示例:使用application.properties
配置Elasticsearch连接
# Elasticsearch配置
spring.data.elasticsearch.cluster-name=your-cluster-name
spring.data.elasticsearch.cluster-nodes=localhost:9200
- spring.data.elasticsearch.cluster-name:Elasticsearch集群的名称。
- spring.data.elasticsearch.cluster-nodes:Elasticsearch节点的地址,格式为
host:port
。
2.3 创建Elasticsearch实体类
在Spring Data Elasticsearch中,我们通过@Document
注解来标记一个实体类,使其与Elasticsearch中的索引相关联。
示例:创建Elasticsearch实体类
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
@Document(indexName = "user", type = "doc")
public class User {
@Id
private String id;
private String name;
private String email;
// Getters and Setters
}
在这个示例中:
@Document
注解将User
实体类与Elasticsearch中的user
索引关联。@Id
注解标记id
字段为Elasticsearch中的文档ID。
2.4 创建Elasticsearch Repository
Spring Data Elasticsearch提供了类似于JPA的Repository
接口,可以让我们轻松地进行CRUD操作。
示例:创建UserRepository
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface UserRepository extends ElasticsearchRepository<User, String> {
User findByName(String name);
}
ElasticsearchRepository
继承自PagingAndSortingRepository
,支持分页和排序操作,并且自动提供了save()
, findAll()
, delete()
等常见的CRUD方法。
2.5 使用Elasticsearch操作数据
通过UserRepository
,我们可以在Spring Boot中执行Elasticsearch的常见操作。
示例:使用Repository进行数据操作
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User saveUser(User user) {
return userRepository.save(user);
}
public User findUserByName(String name) {
return userRepository.findByName(name);
}
public Iterable<User> getAllUsers() {
return userRepository.findAll();
}
}
在这个示例中,saveUser()
方法保存用户数据,findUserByName()
方法根据名字查找用户,getAllUsers()
方法获取所有用户。
🧑 三、Elasticsearch高级功能
3.1 分析和查询
除了基本的CRUD操作,Elasticsearch还提供了强大的查询能力。Spring Data Elasticsearch支持构建复杂的查询、过滤和排序操作。
示例:使用Query
进行复杂查询
import org.springframework.data.elasticsearch.core.query.Query;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.domain.PageRequest;
import org.springframework.beans.factory.annotation.Autowired;
public class CustomSearchService {
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
public List<User> searchByName(String name) {
Query query = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchQuery("name", name))
.withPageable(PageRequest.of(0, 10))
.build();
return elasticsearchTemplate.queryForList(User.class, query);
}
}
在这个示例中,使用NativeSearchQueryBuilder
构建了一个基于名称的查询,并对结果进行分页。
3.2 聚合查询
Elasticsearch支持聚合查询,可以对数据进行分组、求和、计数等操作。
示例:使用聚合查询统计
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.aggregation.AggregationResults;
public class AggregationService {
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
public void aggregateUserData() {
AggregationResults<User> results = elasticsearchTemplate.aggregate(
AggregationBuilders.terms("group_by_name").field("name").size(10),
User.class);
results.getAggregations().forEach(aggregation -> {
System.out.println(aggregation.getKey());
});
}
}
通过聚合查询,可以对Elasticsearch中的数据进行分组统计或其他复杂的分析操作。
四、Elasticsearch性能优化
4.1 使用合适的索引
为了提高查询性能,我们需要为Elasticsearch的字段创建合适的索引。在Elasticsearch中,索引是数据存储和查询的核心部分。
示例:使用@Field
注解创建索引
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
@Document(indexName = "user")
public class User {
@Id
private String id;
@Field(type = FieldType.Text)
private String name;
@Field(type = FieldType.Keyword)
private String email;
// Getters and Setters
}
FieldType.Text
:适用于需要进行全文搜索的字段。FieldType.Keyword
:适用于精确匹配的字段。
4.2 配置Elasticsearch集群
对于高并发、高可用的场景,建议使用Elasticsearch集群来分布数据并进行负载均衡。Spring Boot支持与Elasticsearch集群的集成,确保系统的可靠性和可扩展性。
示例:配置多个节点
spring.data.elasticsearch.cluster-nodes=localhost:9200,localhost:9201
spring.data.elasticsearch.cluster-name=your-cluster-name
通过配置多个节点,你可以实现Elasticsearch的高可用性和横向扩展。
五、总结
在本文中,我们探讨了如何在Spring Boot应用中集成Elasticsearch,并实现以下功能:
- Elasticsearch依赖与配置:通过
spring-boot-starter-data-elasticsearch
依赖集成Elasticsearch,并通过配置文件设置连接信息。 - Elasticsearch实体类与Repository:通过
@Document
注解标记Elasticsearch实体类,并使用MongoRepository
进行数据访问。 - Elasticsearch查询与聚合:实现了全文搜索、复杂查询和聚合操作。
- 性能优化:通过配置索引、集群等优化查询性能,确保Elasticsearch的高效运行。
通过这些集成和优化,你可以轻松将Elasticsearch与Spring Boot应用结合,为系统提供强大的搜索和数据分析能力。希望这篇文章对你有所帮助!
🧧福利赠与你🧧
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」专栏(全网一个名),bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。
最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。
️ Who am I?
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主/价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-
- 随机文章
- 热门文章
- 热评文章
- 日本语能力测试网上报名系统使用指南日本语能力测试报名时间2022
- 探索国际标准智商测试:60题全解析国际标准智商测试60题在线测试
- 探索门萨智商测试:挑战与启示门萨智商测试题及答案简单
- 【详解】@Cacheable注解Redis时,Redis宕机或其他原因连不上,继续调用原方法的解决方案
- Java Hibernate ORM系统
- Java MyBatis 数据访问系统
- 大模型时代:程序员的 “体力” 与 “脑力” 之变
- Java 网络编程性能优化:高吞吐量的实现方法
- 心理测试 测试你内心真正的性格