環境準備
-
安裝 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.properties
或 application.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/solrcore: 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@Fieldprivate String id;@Fieldprivate String name;@Fieldprivate String description;@Fieldprivate 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 {@Autowiredprivate 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 {@Autowiredprivate ProductService productService;@PostMappingpublic 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