详解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日

相关文章

  • Apache Log4j2 报核弹级漏洞快速修复方法

    下面我来为您讲解“Apache Log4j2报核弹级漏洞快速修复方法”的完整攻略。 一、背景介绍 在2021年12月8日,美国网络安全局 (NSA) 警告公众一种名为 Log4Shell 的漏洞,该漏洞存在于 Log4j 2.x 中,攻击者可通过该漏洞远程执行代码,甚至可以获得系统控制权。由于该漏洞的严重性,被称为“核弹级漏洞”。 二、修复方法 1.更新 L…

    Java 2023年6月2日
    00
  • Java异常处理中的try-with-resources语句如何使用?

    Java异常处理中的try-with-resources语句是一种方便且高效的方式来自动管理资源确保它们被正确关闭以释放系统资源。该语句可用于处理带有closable接口的资源对象和实现了AutoCloseable接口的资源对象。 基本语法如下: try (资源初始化语句; 资源初始化语句 …) { // 可能抛出异常的代码区域 } catch (异常类…

    Java 2023年4月27日
    00
  • SQL 注入式攻击的本质

    SQL注入式攻击指的是攻击者通过在应用程序的输入框中插入恶意的SQL代码,让数据库执行攻击者所期望的操作。SQL注入攻击通常被用来窃取敏感信息、修改数据库数据、或者进行其他恶意操作。 攻击者会尝试在表单、搜索框、登录框等应用程序的输入框中插入SQL代码。如果输入框没有进行正确的数据过滤与转义,攻击者就可以通过输入特定的SQL语句来修改数据库中的数据,这种攻击…

    Java 2023年6月15日
    00
  • Java如何连接数据库图文教程

    首先我来讲解一下“Java如何连接数据库”的完整攻略。 一、准备工作 1.1 下载并安装数据库 Java程序连接数据库需要先安装对应的数据库软件,这里以MySQL数据库为例。可以在官网 https://dev.mysql.com/downloads/mysql 下载MySQL Community Server安装包(根据系统位数选择),下载后按照提示安装即可…

    Java 2023年5月19日
    00
  • springsecurity 基本使用详解

    下面我来详细讲解一下“springsecurity 基本使用详解”的完整攻略。 Spring Security 基本使用详解 什么是 Spring Security Spring Security 是针对 Spring 框架的安全性认证框架。也是 Spring Boot 应用中最常用的安全框架之一。它提供了全面的安全性解决方案,以保护应用程序的各个方面,从身…

    Java 2023年5月20日
    00
  • 一文带你了解Java中的函数式编程

    一文带你了解Java中的函数式编程 函数式编程是一种以函数为主要构造模块的编程范式,它现在已经在Java语言中越来越流行。在Java 8以后的版本中,引入了一些新的语言特性来支持函数式编程,例如Lambda表达式、Stream API和函数接口等。本文将带你深入了解Java中的函数式编程。 Lambda表达式 Lambda表达式是Java 8中最重要的新特性…

    Java 2023年5月23日
    00
  • java 汉诺塔Hanoi递归、非递归(仿系统递归)和非递归规律 实现代码

    Java实现汉诺塔问题的递归解法 汉诺塔问题:有三根相邻的柱子,标号为a、b、c,其中a柱子上有n个直径大小各不相同的圆盘,按从小到大的顺序依次从上到下叠放。要把所有盘子一个一个移动到另一个柱子上,条件是每次只能移动一个盘子,且不能出现大盘压小盘的情况。 看到这个问题,我们第一时间可以想到递归。为了更好的理解递归,我们可以先从最简单的情况开始理解。 当只有1…

    Java 2023年5月19日
    00
  • Java时间处理第三方包Joda Time使用详解

    Java时间处理第三方包Joda Time使用详解 Joda Time简介 Joda Time是一个Java日期和时间处理的第三方包,它能够提供更加简便易用且功能更加强大的日期和时间处理功能,相较于Java内置的Date和Calendar类而言,Joda Time最大的优势在于它的API设计非常简洁易懂,同时还提供了大量的日期和时间处理功能。 Joda Ti…

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