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
相关推荐
码农进化录41 分钟前
Java 程序员的 AI 进化论 | 用 AI 生成 Spring Boot 脚手架,省下两小时重复劳动
java·spring boot·openai
sugar__salt1 小时前
MyBatis-Plus 从入门到实战:高效简化数据库开发的完整指南
数据库·spring boot·mybatis·数据库开发
wwwzhouzy1 小时前
SpringBoot 响应式编程
java·spring boot·后端·响应式编程
冰夏之夜影2 小时前
【解决方案】SpringBoot项目添加ssl证书后不生效问题
spring boot·后端·ssl
2601_963870212 小时前
【计算机毕业设计】基于Spring boot+Vue系统的健身俱乐部管理系统的设计与实现
spring boot·后端·课程设计
andongni2032 小时前
Spring Boot基础应用开发与部署
java·spring boot·后端
摇滚侠13 小时前
《SpringBoot 3:入门与应用实战》第 2 章 IOC 思想与实现 阅读笔记 1
spring boot·笔记·后端
ChaHae-In14 小时前
SpringBoot统一功能处理
java·spring boot·后端
今天的砖头有点烫手啊21 小时前
接口太慢?Spring Boot 缓存体系 @Cacheable 全链路拆解
spring boot·后端·缓存
ChaHae-In1 天前
MyBatis入门操作
java·mybatis