Spring Boot 集成 Solr 的详细示例

 更新时间:2025年05月20日 11:20:44   作者:搬砖牛马人  
这篇文章主要介绍了Spring Boot 集成 Solr 的详细示例,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧

环境准备

  • 安装 Solr :从 Solr 官网(Welcome to Apache Solr - Apache Solr)下载并安装最新版本,然后通过命令 bin/solr start 启动 Solr 服务,使用 bin/solr create -c mycore 创建一个新的 Solr 核心。
  • 安装 JDK :确保安装了 JDK 8 及以上版本。
  • 配置 Maven :以 Maven 作为项目构建工具,创建 Spring Boot 项目。

添加依赖

在 Spring Boot 项目的 pom.xml 文件中添加以下依赖:

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

此依赖会自动配置 Spring Data Solr 的相关组件,包括 Solr 客户端和 Spring Solr 支持。

配置 Solr 连接

application.propertiesapplication.yml 文件中添加 Solr 的连接配置,示例如下:

application.properties

spring.data.solr.host=http://localhost:8983/solr
spring.data.solr.core=mycore

application.yml

spring:
  data:
    solr:
      host: http://localhost:8983/solr
      core: mycore

定义实体类

创建一个实体类用于映射 Solr 中的文档,示例如下:

package cn.juwatech.model;
import org.apache.solr.client.solrj.beans.Field;
import org.springframework.data.annotation.Id;
import org.springframework.data.solr.core.mapping.SolrDocument;
@SolrDocument(collection = "mycore")
public class Product {
    @Id
    @Field
    private String id;
    @Field
    private String name;
    @Field
    private String description;
    @Field
    private double price;
    // Getters and Setters
}

其中,@SolrDocument(collection = "mycore") 指定了 Solr 的核心名称,@Field 注解用于将实体类的字段映射到 Solr 文档的字段。

编写 Repository 接口

创建一个继承自 SolrCrudRepository 的接口来操作 Solr 中的数据,示例如下:

package cn.juwatech.repository;
import cn.juwatech.model.Product;
import org.springframework.data.solr.repository.SolrCrudRepository;
import java.util.List;
public interface ProductRepository extends SolrCrudRepository<Product, String> {
    List<Product> findByNameContaining(String name);
}

通过继承 SolrCrudRepository 接口,可方便地进行文档的增删改查操作,findByNameContaining 方法可用于按名称模糊查询。

创建 Service 与 Controller

创建 Service :封装业务逻辑,示例如下:

package cn.juwatech.service;
import cn.juwatech.model.Product;
import cn.juwatech.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ProductService {
    @Autowired
    private ProductRepository productRepository;
    public void saveProduct(Product product) {
        productRepository.save(product);
    }
    public List<Product> searchByName(String name) {
        return productRepository.findByNameContaining(name);
    }
    public void deleteProduct(String id) {
        productRepository.deleteById(id);
    }
}

创建 Controller :处理 HTTP 请求,示例如下:

package cn.juwatech.controller;
import cn.juwatech.model.Product;
import cn.juwatech.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/products")
public class ProductController {
    @Autowired
    private ProductService productService;
    @PostMapping
    public void addProduct(@RequestBody Product product) {
        productService.saveProduct(product);
    }
    @GetMapping("/search")
    public List<Product> searchProducts(@RequestParam String name) {
        return productService.searchByName(name);
    }
    @DeleteMapping("/{id}")
    public void deleteProduct(@PathVariable String id) {
        productService.deleteProduct(id);
    }
}

示例运行与测试

添加产品 :启动 Spring Boot 应用后,发送 POST 请求添加产品,如使用 curl 命令:

curl -X POST -H "Content-Type: application/json" -d '{"id":"1","name":"Laptop","description":"High performance laptop","price":1000}' http://localhost:8080/products

搜索产品 :发送 GET 请求搜索产品:

curl http://localhost:8080/products/search?name=Laptop

删除产品 :发送 DELETE 请求删除产品:

curl -X DELETE http://localhost:8080/products/1

到此这篇关于Spring Boot 集成 Solr 的详细示例的文章就介绍到这了,更多相关Spring Boot 集成 Solr内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • EasyExcel工具读取Excel空数据行问题的解决办法

    EasyExcel工具读取Excel空数据行问题的解决办法

    EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单,节省内存著称,下面这篇文章主要给大家介绍了关于EasyExcel工具读取Excel空数据行问题的解决办法,需要的朋友可以参考下
    2022-08-08
  • 一文详解SpringBoot使用Kafka如何保证消息不丢失

    一文详解SpringBoot使用Kafka如何保证消息不丢失

    这篇文章主要为大家详细介绍了SpringBoot使用Kafka如何保证消息不丢失的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2025-01-01
  • Java 详细讲解分治算法如何实现归并排序

    Java 详细讲解分治算法如何实现归并排序

    分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解,本篇文章我们就用分治算法来实现归并排序
    2022-04-04
  • JAVA时间戳-Calendar类使用(包括set,get,add方法)

    JAVA时间戳-Calendar类使用(包括set,get,add方法)

    这篇文章主要介绍了JAVA时间戳-Calendar类使用(包括set,get,add方法),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Java获取精确到秒的时间戳方法

    Java获取精确到秒的时间戳方法

    这篇文章主要为大家详细介绍了Java获取精确到秒的时间戳方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • JAVA实现简单系统登陆注册模块

    JAVA实现简单系统登陆注册模块

    这篇文章主要介绍了一个简单完整的登陆注册模块的实现过程,文章条理清晰,在实现过程中加深了对相关概念的理解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-07-07
  • java编程SpringSecurity入门原理及应用简介

    java编程SpringSecurity入门原理及应用简介

    Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案
    2021-09-09
  • JVM的内存回收及常见算法小结

    JVM的内存回收及常见算法小结

    这篇文章主要介绍了JVM的内存回收及常见算法,需要的朋友可以参考下
    2023-05-05
  • Java多线程并发JUC包ReentrantLock显示锁的用法

    Java多线程并发JUC包ReentrantLock显示锁的用法

    这篇文章主要介绍了Java多线程并发JUC包ReentrantLock显示锁的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Spring实现动态数据源切换的方法总结

    Spring实现动态数据源切换的方法总结

    这篇文章主要为大家详细介绍了一种Spring实现动态数据源切换的方法,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-06-06

最新评论