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 文件中添加以下依赖:

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

    bash 复制代码
    spring.data.solr.host=http://localhost:8983/solr
    spring.data.solr.core=mycore
  • application.yml

    bash 复制代码
    spring:
      data:
        solr:
          host: http://localhost:8983/solr
          core: mycore

    定义实体类

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

    java 复制代码
    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 中的数据,示例如下:

    java 复制代码
    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 :封装业务逻辑,示例如下:

    java 复制代码
    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 请求,示例如下:

    java 复制代码
    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 命令:

    bash 复制代码
    curl -X POST -H "Content-Type: application/json" -d '{"id":"1","name":"Laptop","description":"High performance laptop","price":1000}' http://localhost:8080/products
  • 搜索产品 :发送 GET 请求搜索产品:

    bash 复制代码
    curl http://localhost:8080/products/search?name=Laptop
  • 删除产品 :发送 DELETE 请求删除产品:

    bash 复制代码
    curl -X DELETE http://localhost:8080/products/1
相关推荐
fanTuanye1 小时前
【SpringBoot篇】详解短信验证码登录功能实现
spring boot·后端
_UMR_2 小时前
SpringBoot集成CXF框架,实现WebService
java·spring boot
武昌库里写JAVA3 小时前
iview 如何设置sider宽度
java·vue.js·spring boot·学习·课程设计
源来是大数据的菜鸟4 小时前
如何将腾讯云的测试集成到自己的SpringBoot中
spring boot·redis·腾讯云
王天华帅哥4 小时前
解决因字段过长使MYSQL数据解析超时导致线上CPU告警问题
spring·mybatis
hello1114-4 小时前
JavaWeb学习打卡-Day6-SpringBean管理、SpringBoot自动装配、Maven高级
spring boot·学习·maven·javaweb
愛芳芳5 小时前
springboot+mysql+element-plus+vue完整实现汽车租赁系统
前端·vue.js·spring boot·后端·mysql·elementui·汽车
杨不易呀6 小时前
互联网大厂Java面试:从Java SE到微服务的全栈挑战
java·spring boot·spring cloud·微服务·面试·技术栈·内容社区
xuanjiong6 小时前
Javaweb项目--Mybatis,导入com.mysql.cj.jdbc.Driver时报错,Cannot resolve class ‘Driver‘
数据库·mysql·mybatis