详解spring-boot集成elasticsearch及其简单应用

详解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的简单搜索引擎,如下:

  1. 添加依赖和配置连接等,实现基本的配置
  2. 添加Article实体类,定义索引结构
  3. 添加ArticleRepository,定义仓库
  4. 添加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”参数,在文章标题和内容中进行搜索。

示例二:实现定时任务创建并添加文章

下面我们将展示如何实现定时任务创建并添加文章,如下:

  1. 添加依赖和配置连接等,实现基本的配置
  2. 添加Article实体类,定义索引结构
  3. 添加ArticleRepository,定义仓库
  4. 添加定时任务,并注入ArticleRepository
  5. 定时任务内添加文章
@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技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • SpringMVC+Mybatis实现的Mysql分页数据查询的示例

    接下来我将详细讲解“SpringMVC+Mybatis实现的Mysql分页数据查询的示例”的完整攻略,过程中将给出两条示例说明。 准备工作 在开始实现分页数据查询之前,需要确保以下几点: JDK版本在1.8及以上 Maven依赖管理工具 SpringMVC框架 Mybatis持久层框架 Mysql数据库 添加依赖 在Maven的pom.xml文件中添加Spr…

    Java 2023年6月15日
    00
  • 用python将pdf转化为有声读物

    将PDF转化为有声读物的过程需要使用 Python 中的两个主要库:1. PyPDF2: 用于解析 PDF 文件。2. pyttsx3: 文字转语音库 – 与文本转语音有关。 下面是一个步骤示例,如何在Python中使用PyPDF2和pyttsx3将PDF文档转换为有声读物: 步骤 1 – 安装 PyPDF2 和 pyttsx3 库 在命令提示符中输入以下命…

    Java 2023年6月15日
    00
  • java基于数据库实现全局唯一ID的示例

    以下是“java基于数据库实现全局唯一ID的示例”的完整攻略及两条示例: 一、前置条件 在进行本教程之前,请确保以下条件已经满足: 你已熟悉Java编程语言,并且能够独立编写Java代码; 你已经安装了MySQL数据库,并掌握了基本操作; 你已经安装了Java开发环境和相关依赖库。 二、方案选择 目前常见的实现全局唯一ID的方案有雪花算法、UUID等。本教程…

    Java 2023年5月20日
    00
  • Java 实战项目之毕业设计管理系统的实现流程

    Java 实战项目之毕业设计管理系统的实现流程 项目背景介绍 毕业设计管理系统是一款便于学校教师、学生交流的平台,旨在方便学生申请并确认自己的毕设课题,并使教师能够更好的管理学生的毕业设计过程,帮助学生更好的完成毕设项目。 项目实现流程 第一步、需求调研 在设计毕业设计管理系统之前,我们首先需要对项目需求进行调研和分析,确定不同用户的需求,并了解他们可能遇到…

    Java 2023年5月24日
    00
  • MyBatis动态SQL标签的用法详解

    MyBatis动态SQL标签的用法详解 MyBatis支持使用动态SQL标签,通过在XML中使用不同的标签和表达式可以很灵活地生成不同的SQL语句。在本文中,将详细讲解MyBatis动态SQL标签的使用方法。 if标签 if标签用于判断某个条件是否成立,如果成立则生成指定的SQL语句。示例: <select id="getUserList&q…

    Java 2023年5月20日
    00
  • JsonFormat与@DateTimeFormat注解实例解析

    JsonFormat与@DateTimeFormat注解实例解析 在Java中,我们经常需要将日期和时间格式化为特定的格式。为了实现这个目的,我们可以使用@JsonFormat和@DateTimeFormat注解。在本文中,我们将详细讲解这两个注解的用法,并提供两个示例来说明这个过程。 JsonFormat注解 @JsonFormat注解用于指定日期和时间的…

    Java 2023年5月18日
    00
  • 基于servlet的执行原理与生命周期(全面解析)

    基于servlet的执行原理与生命周期(全面解析) Servlet 是一种 Java 技术,可以用于生成动态 Web 内容。本文将详细介绍 Servlet 的执行原理与生命周期。 Servlet 执行原理 Servlet 是基于请求/响应模型的,当客户端发送请求时,Servlet 容器会根据请求的 URL 将请求分发到相应的 Servlet,并调用相应的方法…

    Java 2023年5月26日
    00
  • Java接口的作用_动力节点Java学院整理

    Java接口的作用_动力节点Java学院整理 一、什么是Java接口 Java接口是抽象类的一种特殊形式,它只包含抽象方法、常量和默认方法。接口中所有的成员都是public访问修饰符(当然也可以省略不写public),即所有的成员方法和数据字段都必须是公开的。 二、Java接口的作用 Java接口作为Java中的一种设计思想,在实际开发中具有如下几个作用: …

    Java 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部