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

<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

    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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904251.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904251.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904251.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【自然語言處理與大模型】LlamaIndex的數據連接器和對話引擎

LlamaIndex 是領先的開發框架&#xff0c;專為結合大型語言模型&#xff08;LLM&#xff09;與個性化工作流打造高效的數據驅動型智能代理而設計。一般我們用它來做RAG檢索增強生成。 &#xff08;1&#xff09;RAG的介紹 大型語言模型&#xff08;LLM&#xff09;雖然在海量數…

【實戰教程】React Native項目集成Google ML Kit實現離線水表OCR識別

前言 在移動應用開發中&#xff0c;OCR&#xff08;光學字符識別&#xff09;技術廣泛應用于各類場景。本文將詳細介紹如何在React Native項目中集成Google ML Kit&#xff0c;實現離線水表數字識別功能。全程使用TypeScript&#xff0c;并針對React Native 0.74版本進行適配&a…

全球化電商平臺AWS云架構設計

業務需求&#xff1a; 支撐全球三大區域&#xff08;北美/歐洲/亞洲&#xff09;用戶訪問&#xff0c;延遲<100ms處理每秒50,000訂單的峰值流量混合云架構整合本地ERP系統全年可用性99.99%滿足GDPR和PCI DSS合規要求 以下是一個體現AWS專家能力的全球化電商平臺架構設計方…

jupyter notebook運行簡單程序

一. 使用 cmd 創建虛擬環境 1.創建虛擬環境 &#xff08;1&#xff09;創建新的虛擬環境&#xff08;本項目名設置為zhineng&#xff09;&#xff0c;并設置python版本 conda create -n zhineng python3.6 &#xff08;2&#xff09;查看python版本 python --version &am…

【計算機視覺】語義分割:MMSegmentation:OpenMMLab開源語義分割框架實戰指南

深度解析MMSegmentation&#xff1a;OpenMMLab開源語義分割框架實戰指南 技術架構與設計哲學系統架構概覽核心技術特性 環境配置與安裝指南硬件配置建議詳細安裝步驟環境驗證 實戰全流程解析1. 數據集準備2. 配置文件定制3. 模型訓練與優化4. 模型評估與推理 核心功能擴展1. 自…

計算機圖形學編程(使用OpenGL和C++)(第2版)學習筆記 01.環境搭建

計算機圖形學編程(使用OpenGL和C)(第2版) 這是我學習計算機圖形學編程(使用OpenGL和C)的筆記&#xff0c;主要記錄學習心得及一些學習過程中遇到的問題和解決方案。源代碼存放在github上。 參考資料&#xff1a; 原書資源(程序代碼、模型、紋理、貼圖及圖表)下載ShaderToy學習…

代碼隨想錄算法訓練營第三十二天

LeetCode/卡碼網題目: 518. 零錢兌換 II377. 組合總和 Ⅳ790. 多米諾和托米諾平鋪(每日一題)57. 爬樓梯&#xff08;第八期模擬筆試&#xff09; 其他: 今日總結 往期打卡 背包問題特點: 滾動數組背包遍歷順序 完全背包從小到大,即基于當前物品更新過的繼續更新01背包從大到…

第十六屆藍橋杯 2025 C/C++組 密密擺放

目錄 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; 思路&#xff1a; 思路詳解: 發個牢騷&#xff1a; 代碼&#xff1a; 代碼詳解&#xff1a; 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; P12337 [藍橋杯 2025 省 AB/Python B 第二…

分析rand()和srand()函數的功能

rand()和srand()函數原型&#xff1a; int rand(void) 返回一個范圍在 0 到 RAND_MAX 之間的偽隨機數。 void srand(unsigned int seed)用來給rand() 設置隨機數發生器&#xff0c;隨機數發生器輸出不同的數值&#xff0c;rand() 就會生成不同的隨機數 1)、在“D:\Keil_v5\AR…

debuginfo詳解

debuginfo 是 Linux 系統中存儲調試符號和源代碼信息的特殊軟件包&#xff0c;用于分析內核或用戶態程序的崩潰轉儲文件&#xff08;如 vmcore、coredump&#xff09;。它在調試復雜問題&#xff08;如內核崩潰、程序段錯誤&#xff09;時至關重要。以下是其核心作用、安裝方法…

Python 爬取微店商品列表接口(item_search)的實戰指南

在電商數據分析、市場調研或競品分析中&#xff0c;獲取商品列表信息是常見的需求。微店作為知名的電商平臺&#xff0c;提供了豐富的商品資源和相應的 API 接口。本文將詳細介紹如何使用 Python 爬蟲技術&#xff0c;通過微店的 item_search 接口根據關鍵詞搜索商品列表&#…

【bazel】bazel簡介及簡單使用

文章目錄 1. What is bazel?2. bazel的核心原理2.1 bazel的構建模型2.2 bazel的核心概念2.3 bazel的關鍵特性 3. bazel的使用3.1 劃分項目結構3.2 編寫BUILD文件3.3 bazel常用命令3.4 bazel依賴管理 參考內容 1. What is bazel? bazel是一個開源的構建工具&#xff0c;它基于…

【Mytais系列】Myatis的設計模式

目錄 設計模式 1. 工廠模式&#xff08;Factory Pattern&#xff09; 2. 建造者模式&#xff08;Builder Pattern&#xff09; 3. 動態代理模式&#xff08;Dynamic Proxy Pattern&#xff09; 4. 模板方法模式&#xff08;Template Method Pattern&#xff09; 5. 策略模…

【unity游戲開發入門到精通——UGUI】Mask組件實現UGUI遮罩

注意&#xff1a;考慮到UGUI的內容比較多&#xff0c;我將UGUI的內容分開&#xff0c;并全部整合放在【unity游戲開發——UGUI】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言如何實現UI遮罩1、Mask組件2、實例3、注意 專欄推薦完結 前言 Mask遮罩是…

Github2025-05-04php開源項目日報 Top10

根據Github Trendings的統計,今日(2025-05-04統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量PHP項目10Shell項目1Vue項目1Java項目1ASP項目1SecLists - 安全測試人員的伴侶 創建周期:4375 天開發語言:PHP協議類型:MIT LicenseStar數量…

MyBatis 一對多與多對一映射詳解教程

一、基礎概念與場景 一對多&#xff08;One-to-Many&#xff09; ? 定義&#xff1a;一個父對象包含多個子對象。 例如&#xff1a;一個商品&#xff08;Goods&#xff09;對應多個商品詳情&#xff08;GoodsDetail&#xff09; ? 實體類表現&#xff1a;父類中包含 List&l…

ChatGPT:重塑人工智能交互范式的破曉之作

2022年11月30日,總部位于舊金山的研究公司OpenAI正式發布了ChatGPT——一款以病毒式傳播速度席卷全球的AI聊天機器人。它不僅能像人類一樣生成內容、回答問題和解決問題,更在推出后的兩個月內吸引了超過1億月活躍用戶,刷新了消費級技術應用的最快采用率紀錄。這一里程碑事件…

在項目中如何對Map List等對象序列化及反序列化

我們知道&#xff0c;在自定義類中&#xff0c;若想完成序列化必須要實現Serializable接口。 那么在實現后如何進行序列化呢&#xff1f; 一.普通對象 序列化&#xff1a; 1.首先我們要定義一個 序列化所需要的工具類 ObjectMapper //定義序列化所需要的工具類 轉化機器…

筆試專題(十五)

文章目錄 排序子序列題解代碼 消減整數題解代碼 最長公共子序列(二)題解代碼 排序子序列 題目鏈接 題解 1. 貪心 模擬 2. 1 2 3 2 2 應該是有兩個排列子序列的&#xff0c;所以i n-1時ret 3. 把水平的位置和上升部分&#xff0c;水平位置和下降部分分為一個排列子序列 代…

Amazon Bedrock Converse API:開啟對話式AI新體驗

Amazon Bedrock Converse API&#xff1a;開啟對話式AI新體驗 前言 在當今人工智能飛速發展的時代&#xff0c;對話式AI已成為眾多應用的核心組成部分。從智能客服到智能助手&#xff0c;對話式AI為用戶帶來了便捷且高效的交互體驗。而Amazon Bedrock Converse API的出現&…