大家好,我是 INFINI Labs 的石陽。
歡迎回到 《搜索百科》 專欄!每天 5 分鐘,帶你速覽一款搜索相關的技術或產品,同時還會帶你探索它們背後的技術原理、發展故事及上手體驗等。
上一篇我們認識了搜索技術的基石 Apache Lucene,今天我們將繼續這個旅程,瞭解基於 Lucene 構建的第一個成功商業級搜索平台 —— Apache Solr。
Solr 是什麼?
Solr 是一款極速的開源多模態搜索平台,基於 Apache Lucene 的全文、向量和地理空間搜索能力構建而成。Solr 具備高可靠性、可擴展性和容錯性,支持分佈式索引、複製與負載均衡查詢,提供自動故障轉移與恢復、集中化配置等功能。如今,Solr 為全球眾多大型互聯網網站提供搜索和導航功能。
- 首次發佈:2004 年,2006 年進入 Apache
- 最新版本:截至 2025 年,已更新至 9.x 系列
- 核心依賴:Apache Lucene
- 開源協議:Apache License 2.0
- 官方網址:https://solr.apache.org
- GitHub 倉庫:https://github.com/apache/solr
它的定位是:把 Lucene 打造成獨立的企業級搜索服務。相比 Lucene 需要寫代碼調用,Solr 提供了 Web 管理界面、REST API 和配置文件,讓開發者更容易上手。
起源:從網站搜索到 Apache 頂級項目
Solr(讀作"solar")的故事始於 2004 年,當時 CNET 公司的開發人員 Yonik Seeley 需要為其新聞網站構建一個搜索功能。雖然 Lucene 提供了強大的核心搜索能力,但直接使用 Lucene 需要編寫大量 Java 代碼,缺乏開箱即用的功能。
Seeley 決定在 Lucene 之上構建一個更易用的搜索服務器,於是 Solr 誕生了。最初的目標很明確:通過 HTTP/XML 接口提供搜索服務,讓任何編程語言都能輕鬆集成搜索功能。
2006 年,Solr 捐贈給 Apache 基金會,2007 年成為頂級項目。2010 年,Solr 與 Lucene 項目合併,形成了今天我們所知的 Apache Lucene/Solr 項目。
技術架構
Index(索引)
Apache Solr 的索引就像是用於管理結構化 / 非結構化數據的“數據庫”。它以便於分析和全文檢索的方式存儲數據。
Query Parser(查詢解析器)
所有由客户端提交的查詢都會由查詢解析器處理。
Response Handler(響應處理器)
響應處理器負責為客户端生成合適格式的響應(如 JSON/XML/CSV)。
Update Handler(更新處理器)
更新處理器用於索引操作,即對索引中的數據進行插入、更新和刪除。例如,如果我們希望 MySQL 數據與 Apache Solr 保持同步,就需要創建一個負責同步的更新處理器。
功能亮點
- 全文檢索:高效支持關鍵詞搜索、布爾查詢、短語匹配等。
- 分面搜索(Faceted Search):可以對搜索結果進行分類和聚合統計。
- 分佈式架構(SolrCloud):支持集羣部署、自動分片、副本和容錯。
- 豐富的數據接口:提供 RESTful API,支持 JSON、XML、CSV 等多種格式的數據交互。
- 擴展性與可定製性:通過插件機制支持多語言分詞、排序、評分模型等個性化定製。
- 地理位置搜索:內置空間搜索能力,支持基於經緯度的範圍查詢和排序。
對比: Solr vs Elasticsearch 如何選擇?
雖然兩者都基於 Lucene,但在設計哲學上有所不同:
| 特性 | Apache Solr | Elasticsearch |
|---|---|---|
| 定位 | 企業級搜索服務器 | 分佈式搜索和分析引擎 |
| API | 更標準化,遵循傳統 REST | 更靈活,JSON 原生 |
| 分佈式 | 需要 ZooKeeper 協調 | 內置分佈式協調 |
| 上手難度 | 相對簡單,開箱即用 | 學習曲線較陡峭 |
| 生態系統 | 搜索功能更豐富 | 分析和可視化更強 |
| 適用場景 | 傳統企業搜索、電商 | 日誌分析、實時監控 |
簡單來説:Solr 更像"精裝房",開箱即用;Elasticsearch 更像"毛坯房",需要更多自定義但更靈活。
快速開始:5 分鐘搭建 Solr 服務
1. 下載和安裝
# 下載 8.x 版 Solr
wget https://dlcdn.apache.org/solr/solr/8.11.4/solr-8.11.4.tgz
# 解壓
tar -xzf solr-8.11.4.tgz
# 啓動 Solr(單機模式)
cd solr-8.11.4
bin/solr start
2. 創建 Core
# 創建測試 Core
bin/solr create -c test_core
# 查看 Core 狀態
bin/solr status
3. 索引文檔
# 使用 curl 索引 JSON 文檔
curl http://localhost:8983/solr/test_core/update -d '
[
{"id": "1", "title": "Solr 入門指南", "content": "Apache Solr 是企業級搜索平台"},
{"id": "2", "title": "搜索技術演進", "content": "從 Lucene 到 Solr 的技術發展"}
]' -H 'Content-type:application/json'
# 提交更改
curl http://localhost:8983/solr/test_core/update -d '<commit/>' -H 'Content-type:application/xml'
4. 執行搜索
# 搜索"Solr"
curl "http://localhost:8983/solr/test_core/select?q=content:Solr"
# 使用 JSON 格式返回
curl "http://localhost:8983/solr/test_core/select?q=content:Solr&wt=json"
執行搜索返回結果:
訪問 http://localhost:8983/solr 即可使用 Solr 的管理界面。
Dashboard:
Core Admin:
結語
從最初的公司內部工具,到成為全球範圍內廣泛使用的開源搜索引擎,Apache Solr 見證並推動了搜索技術的進化。儘管近年來 Elasticsearch、向量數據庫和 AI 驅動的搜索技術逐漸崛起,但 Solr 依然是許多企業可靠且成熟的選擇。它的故事不僅屬於開源社區,也代表了搜索技術發展的一個重要階段。
🚀 下期預告
在下一篇「搜索百科」中,我們將介紹它的明星兄弟 —— Elasticsearch。
💬 三連互動
- 你現在還在用 Solr 嗎?
- 在 Solr 和 Elasticsearch 之間做過技術選型?
- 遇到過有趣的 Solr 使用案例或挑戰?
對搜索技術感興趣的朋友,歡迎關注《搜索百科》專欄,一起探討與學習!
✨ 推薦閲讀
- 搜索百科(1):Lucene — 打開現代搜索世界的第一扇門
🔗 參考
- Apache Solr 官方文檔
- Apache Solr Fundamentals
原文:https://infinilabs.cn/blog/2025/search-wiki-2-solr/