详解spring-boot集成elasticsearch及其简单应用
在使用spring-boot构建web应用时,我们经常需要一种快速高效的搜索方案来提升用户体验。Elasticsearch是目前比较受欢迎的搜索引擎之一,它具有强大的查询引擎、分布式性能和数据分析能力。本文将详解如何在spring-boot中使用Elasticsearch,并展示一个简单的应用。
第一步:添加依赖
在pom.xml中添加如下依赖,包括spring-boot-starter-data-elasticsearch和elasticsearch-rest-high-level-client。其中spring-boot-starter-data-elasticsearch提供了与spring-data-elasticsearch集成所需的许多类和接口,elasticsearch-rest-high-level-client提供了面向高级REST客户端的API。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.15.1</version>
</dependency>
第二步:配置连接
在application.properties中添加连接配置,包括集群名称、节点名称和node地址等。
spring.data.elasticsearch.cluster-name=es_cluster
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9200
第三步:创建实体类
创建一个实体类,使用注释@Document标识为Elasticsearch索引中的文档,使用注释@Id标记文档的唯一标识符,注释@Field用于指定字段的值。具体代码如下:
@Document(indexName = "article")
public class Article {
@Id
private String id;
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String title;
@Field(type = FieldType.Keyword)
private String author;
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String content;
// 省略getter/setter方法和构造方法
}
第四步:创建仓库
创建一个接口扩展Spring Data Elasticsearch Repository,以定义文章仓库。具体代码如下:
public interface ArticleRepository extends ElasticsearchRepository<Article, String> {
List<Article> findByTitleOrContent(String title, String content);
}
上述代码表示基于标题和内容的搜索功能,根据这两个字段从elasticsearch的“article”索引中检索匹配结果。
第五步:添加数据
现在添加数据到elasticsearch索引中,可以通过ArticleRespository添加数据,如下:
Article article = new Article();
article.setId("1");
article.setTitle("Spring Boot集成elasticsearch应用实战");
article.setAuthor("张三");
article.setContent("本文将详解如何在spring-boot中使用Elasticsearch,并展示一个简单的应用");
articleRepository.save(article);
第六步:查询数据
完成数据的添加后,我们可以直接查询数据,如下:
List<Article> articles = articleRepository.findByTitleOrContent("spring-boot", "elasticsearch");
articles.forEach(System.out::println);
上述代码表示基于标题和内容的搜索功能,根据这两个字段从elasticsearch的“article”索引中检索匹配结果。
示例一:一个简单的搜索引擎
下面我们将展示一个基于spring-boot和elasticsearch的简单搜索引擎,如下:
- 添加依赖和配置连接等,实现基本的配置
- 添加Article实体类,定义索引结构
- 添加ArticleRepository,定义仓库
- 添加Controller,实现搜索功能
@RestController
public class SearchController {
private final ArticleRepository articleRepository;
@Autowired
public SearchController(ArticleRepository articleRepository) {
this.articleRepository = articleRepository;
}
@GetMapping("/search")
public List<Article> search(String keyword) {
return articleRepository.findByTitleOrContent(keyword, keyword);
}
}
上述代码表示在GET请求的路径“/search”中,根据路径中的“keyword”参数,在文章标题和内容中进行搜索。
示例二:实现定时任务创建并添加文章
下面我们将展示如何实现定时任务创建并添加文章,如下:
- 添加依赖和配置连接等,实现基本的配置
- 添加Article实体类,定义索引结构
- 添加ArticleRepository,定义仓库
- 添加定时任务,并注入ArticleRepository
- 定时任务内添加文章
@Component
public class ArticleTask {
private final ArticleRepository articleRepository;
@Autowired
public ArticleTask(ArticleRepository articleRepository) {
this.articleRepository = articleRepository;
}
@Scheduled(fixedRate = 10000)
public void execute() {
Article article = new Article();
article.setId(UUID.randomUUID().toString());
article.setTitle("schedule task test");
article.setAuthor("test");
article.setContent("schedule task test");
articleRepository.save(article);
}
}
上述代码表示每10秒向elasticsearch的“article”中添加一篇文章。
至此,一个简单的Elasticsearch应用已经完成。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解spring-boot集成elasticsearch及其简单应用 - Python技术站