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
相关推荐
SQL-First布道者9 小时前
⚡Spring JDBC 完整体系 · 第 10 集 · 手搓 `BaseCondition`
java·spring boot·后端·spring·mybatis·spring jdbc
2601_962074689 小时前
Spring Boot的无缝衔接:深入解析与实践
数据库·spring boot·后端
南城以南溫暖如初1479 小时前
社交裂变商城系统设计与实战开发指南
java·spring boot·mysql·vue·mybatis
xiaoqiMikko9 小时前
Spring 官方给 5.3 线开了三个修复版,Maven Central 上一个都没有
java·spring boot
南城以南溫暖如初1479 小时前
分享返现商城系统开发实战:技术架构与运营经验指南
java·spring boot·mysql·架构·vue·mybatis
vipxieliang10 小时前
Java切面编程(AOP)详解:从核心概念到实战应用
java·spring boot
.Hypocritical.10 小时前
SpringBoot 各版本 Profile 多环境配置完整对比(2.x/ 2.4+ / 3.x/4.x
java·spring boot·后端
南城以南溫暖如初14711 小时前
社群电商实战指南:从零搭建高转化社区的技术架构
java·spring boot·mysql·系统架构·vue·mybatis
南城以南溫暖如初14711 小时前
会员返利商城系统开发实战:架构设计与实现指南
java·spring boot·mysql·vue·mybatis
MetaLite11 小时前
SpringBoot防重复提交-加一把Redis锁就够吗
spring boot·redis·后端