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
相关推荐
enjoy嚣士2 小时前
springboot之Exel工具类
java·spring boot·后端·easyexcel·excel工具类
小涛不学习4 小时前
Spring Boot 详解(从入门到原理)
java·spring boot·后端
小王不爱笑1326 小时前
MyBatis 执行流程源码级深度解析:从 Mapper 接口到 SQL 执行的全链路逻辑
数据库·sql·mybatis
弹简特7 小时前
【JavaEE18-后端部分】 MyBatis 入门第二篇:使用注解完成增删改查(含有参数传递底层原理)
spring boot·mybatis
于先生吖8 小时前
SpringBoot+Vue 前后端分离短剧漫剧系统开发实战
vue.js·spring boot·后端
小王不爱笑1328 小时前
SpringBoot 自动装配深度解析:从底层原理到自定义 starter 实战(含源码断点调试)
java·spring boot·mybatis
while(1){yan}8 小时前
个人抽奖系统测试报告
spring boot·java-ee·压力测试
asom229 小时前
DDD(领域驱动设计) 核心概念详解
java·开发语言·数据库·spring boot
Fu-dada9 小时前
Spring Boot 开发接口指南
spring boot
大傻^10 小时前
LangChain4j Spring Boot Starter:自动配置与声明式 Bean 管理
java·人工智能·spring boot·spring·langchain4j