SpringBoot整合Elasticsearch实现全文搜索功能

 更新时间:2025年12月31日 09:00:33   作者:野生技术架构师  
在现代应用程序中,对于大量数据的高效管理和快速检索是至关重要的,Elasticsearch作为一款开源的全文搜索引擎,为开发者提供了强大而灵活的搜索解决方案,本文将介绍如何通过Spring Boot框架整合Elasticsearch,实现高效的全文搜索功能,需要的朋友可以参考下

引言

在现代应用程序中,对于大量数据的高效管理和快速检索是至关重要的。Elasticsearch(以下简称ES)作为一款开源的全文搜索引擎,为开发者提供了强大而灵活的搜索解决方案。

本文将介绍如何通过Spring Boot框架整合Elasticsearch,实现高效的全文搜索功能。

创建SpringBoot项目

首先,在你的开发环境中创建一个新的Spring Boot项目。你可以选择使用Spring Initializr(https://start.spring.io/)进行项目初始化,选择所需的依赖和项目设置。

添加Elasticsearch依赖

在项目的pom.xml文件中,添加Elasticsearch客户端库的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

这个依赖将引入Spring Data Elasticsearch,使得在Spring Boot应用中更容易地使用Elasticsearch。

配置Elasticsearch连接

在application.properties文件中,配置Elasticsearch连接信息:

spring:
  data:
    elasticsearch:
      cluster-nodes: localhost:9200

确保你的Elasticsearch实例在本地运行,并监听在默认端口9200上。

创建实体类

定义一个简单的实体类,用于映射到Elasticsearch索引中的文档。例如,如果你要存储文档的标题和内容,可以创建如下类:

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "documents", type = "document")
public class DocumentEntity {

    @Id
    private String id;
    private String title;
    private String content;

    // 省略构造函数和getter/setter方法
}

创建Elasticsearch Repository

使用Spring Data Elasticsearch提供的ElasticsearchRepository接口,创建一个用于与Elasticsearch进行交互的Repository:

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface DocumentRepository extends ElasticsearchRepository<DocumentEntity, String> {
    
    // 可以添加自定义的查询方法
    
}

编写Service层

创建一个Service类,用于封装业务逻辑,调用Repository层进行数据操作:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
publicclass DocumentService {

    @Autowired
    private DocumentRepository documentRepository;

    public List<DocumentEntity> searchDocuments(String keyword) {
        // 可以根据业务需求调用Repository中的方法进行搜索
        return documentRepository.findByTitleOrContent(keyword, keyword);
    }

    public void saveDocument(DocumentEntity document) {
        documentRepository.save(document);
    }
}

创建Controller层

编写一个Controller类,处理来自前端或其他服务的HTTP请求,并调用Service层的方法:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/documents")
publicclass DocumentController {

    @Autowired
    private DocumentService documentService;

    @GetMapping("/search")
    public List<DocumentEntity> searchDocuments(@RequestParam String keyword) {
        return documentService.searchDocuments(keyword);
    }

    @PostMapping("/add")
    public void addDocument(@RequestBody DocumentEntity document) {
        documentService.saveDocument(document);
    }
}

测试

启动你的Spring Boot应用程序,并使用Postman或其他工具测试搜索和添加文档的功能。

总结

通过这个简单的示例,你已经成功地将Elasticsearch集成到了Spring Boot应用程序中。这使得你能够轻松地实现全文搜索功能,提升了应用程序对大量数据的管理和检索效率。当然,根据具体业务需求,你还可以进一步优化和扩展这个基础架构,使用Elasticsearch提供的更高级功能。

以上就是SpringBoot整合Elasticsearch实现全文搜索功能的详细内容,更多关于SpringBoot Elasticsearch全文搜索的资料请关注脚本之家其它相关文章!

相关文章

  • Java下载文件时文件名乱码问题解决办法

    Java下载文件时文件名乱码问题解决办法

    我最近在开发时遇到了文件另存为时文件名出现乱码,在火狐上正常的文件名,在IE中又出现乱码问题,然后好不容易在IE下调试好了文件名乱码问题,在火狐下又出现乱码,最后终于感觉这样是能解决了。具体如下:
    2013-04-04
  • java基础之方法和方法的重载详解

    java基础之方法和方法的重载详解

    这篇文章主要介绍了java基础之方法和方法的重载详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • SpringBoot实战之SSL配置详解

    SpringBoot实战之SSL配置详解

    今天小编就为大家分享一篇关于SpringBoot实战之SSL配置详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • springboot枚举类型传递的步骤

    springboot枚举类型传递的步骤

    这篇文章主要介绍了springboot枚举类型传递的步骤,帮助大家更好的理解和学习使用springboot,感兴趣的朋友可以了解下
    2021-04-04
  • SpringBoot集成MQTT示例详解

    SpringBoot集成MQTT示例详解

    这篇文章主要为大家介绍了SpringBoot集成MQTT示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • SpringBoot3-yaml文件配置方式

    SpringBoot3-yaml文件配置方式

    这篇文章主要介绍了SpringBoot3-yaml文件配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Java基础-Java变量的声明和作用域

    Java基础-Java变量的声明和作用域

    这篇文章主要介绍了Java变量的声明和作用域,变量其实就是内存中的一个存储空间,用来存储数据,具体的相关内容,需要的小伙伴可以参考下面文章内容
    2022-01-01
  • java中字符串替换常用的4种方法

    java中字符串替换常用的4种方法

    在Java中String类提供了许多方便的方法来处理字符串,下面这篇文章主要给大家介绍了关于java中字符串替换常用的4种方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Java8 使用 stream().sorted()对List集合进行排序的操作

    Java8 使用 stream().sorted()对List集合进行排序的操作

    这篇文章主要介绍了Java8 使用 stream().sorted()对List集合进行排序的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • java中LinkedBlockingQueue与ArrayBlockingQueue的异同

    java中LinkedBlockingQueue与ArrayBlockingQueue的异同

    这篇文章主要介绍了java中LinkedBlockingQueue与ArrayBlockingQueue的异同,需要的朋友可以参考下
    2016-08-08

最新评论