大家好,我是 INFINI Labs 的石陽。
這是《搜索百科》專欄系列文章,每天 5 分鐘,帶你速覽一款搜索相關的技術或產品,同時還會帶你探索它們背後的技術原理、發展故事及上手體驗等。
搜索技術看似專業,但它早已深度融入我們的日常生活。無論是電商搜索、知識檢索,還是 AI 語義搜索、RAG、向量檢索,背後都有經典與新興技術的結合。希望這個系列能幫大家建立更清晰的認知,也歡迎留言交流。
引言:為什麼先寫 Lucene?
如果你曾用 GitHub 搜代碼、用電商網站搜商品,或者在日誌平台裏“撈”報錯,你就已經享受了 Lucene 的紅利——只是自己還不知道。今天,讓我們認識下這位“幕後大佬”,看看它如何以一己之力,孵化了整個現代搜索江湖。沒有它,就沒有 Elasticsearch 的鋒芒,也沒有 Solr 的穩健。講搜索,不從 Lucene 開始,就像講武俠不提《易筋經》——根基都丟了。
誕生故事:一個程序員的“副業”成果
Lucene 的誕生頗具傳奇色彩。它的創造者 Doug Cutting(後來也是 Hadoop 的創始人之一)在 1997 年開始開發 Lucene,最初是為了給他的個人項目——一個網絡爬蟲和搜索引擎——提供搜索能力。
當時,市面上並沒有成熟的開源搜索庫可用,Doug 決定自己寫一個。他在業餘時間一點點打磨,最終在 1999 年發佈了第一個版本。2001 年,Lucene 加入了 Apache 軟件基金會,成為 Apache 的第一個開源搜索項目。
有趣的是,Lucene 的名字並不是來自什麼技術術語,而是取自 Doug Cutting 妻子的中間名——Lucene。這也讓這個項目多了一絲浪漫的色彩。
Lucene 概述
Apache Lucene,是一個用 Java 編寫的高性能、全文搜索引擎庫。它不是那種你下載下來就能直接用的“搜索軟件”,而是一個底層庫,就像樂高積木裏的基礎磚塊,雖然不起眼,但沒有它,很多搜索產品根本搭不起來。
Lucene 提供了強大的索引和查詢能力,支持分詞、倒排索引、相關性評分、模糊查詢、布爾查詢等一系列功能。它是 Elasticsearch、Solr、Easysearch、OpenSearch 等現代搜索引擎的核心引擎。
- 首次發佈:1999 年
- 最新版本:截至 2025 年 9 月,Lucene 已更新至
10.2.x系列 - 開源協議:Apache License 2.0(商業友好)
- 官網:https://lucene.apache.org/
- GitHub:https://github.com/apache/lucene
社區生態
雖然已經 25 歲"高齡",Lucene 的社區卻依然活力滿滿。作為 Apache 軟件基金會的頂級項目,它擁有:
- 100+ 活躍貢獻者
- 每月都有新的 commit 和 issue 處理
- 每年發佈 2-4 個主要版本
- 完善的文檔和活躍的郵件列表
雖然不像 Elasticsearch 那樣“出圈”,但在開發者和企業內部系統中仍有廣泛使用。
功能亮點:為什麼大家都愛它?
- 高性能全文檢索內核:倒排索引、短語/布爾/通配符/模糊查詢、相關性打分。
- 面向工程的可擴展分析鏈:分詞器、過濾器、同義詞、停用詞、高亮、排序等。
- 近鄰向量檢索(KNN):原生支持高維向量的最近鄰搜索,為語義檢索/RAG 奠基。 
- 嵌入式 & 純 Java:作為庫嵌入任意 Java 應用,掌控細粒度行為與性能。
- 成熟穩定的版本線:9.x 與 10.x 並行演進,兼顧穩定與新特性。
對比優勢:Lucene vs 世界
| 產品 | 類型 | 與 Lucene 的關係 |
|---|---|---|
| Elasticsearch | 分佈式引擎 | 基於 Lucene,提供分佈式、RESTful 接口 |
| Apache Solr | 搜索平台 | 基於 Lucene,提供 Web 管理界面和更多功能 |
| Meilisearch | 輕量引擎 | 不基於 Lucene,用 Rust 編寫,主打易用性 |
Lucene 是底層引擎,而其他產品是在它之上構建的完整解決方案。如果你想要完全控制搜索邏輯,Lucene 是最佳選擇;如果你想要開箱即用的搜索服務,可以考慮 Elasticsearch 或 Solr。
快速上手:10 分鐘體驗 Lucene
雖然 Lucene 需要寫一些 Java 代碼,但其實入門並不複雜。
1. 環境準備
// Maven 依賴
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>10.xx.xx</version>
</dependency>
2. 創建你的第一個索引
// 創建分析器(支持中文)
Analyzer analyzer = new StandardAnalyzer();
// 創建索引
Directory directory = FSDirectory.open(Paths.get("index"));
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter writer = new IndexWriter(directory, config);
Document doc = new Document();
doc.add(new TextField("content", "歡迎來到 Lucene 的世界", Field.Store.YES));
writer.addDocument(doc);
writer.close();
3. 執行搜索
// 搜索 "Lucene"
Query query = new TermQuery(new Term("content", "lucene"));
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
TopDocs results = searcher.search(query, 10);
System.out.println("找到 " + results.totalHits + " 條結果");
幾行 Java 代碼,就能完成一個迷你搜索引擎。
結語
Apache Lucene 雖然不是面向最終用户的產品,但它是搜索技術的基石。幾乎所有現代搜索引擎都離不開它。如果你對搜索技術有興趣,學習 Lucene 是理解搜索引擎工作原理的最佳途徑。
🚀 下期預告
下一篇,我將介紹 Lucene 的第一個"孩子"—— Apache Solr,看看這個基於 Lucene 的企業級搜索平台如何讓搜索變得更簡單。
💬 三連互動
- 你或公司最近在用 Lucene 嗎?拿來做了什麼場景?
- 你覺得 Lucene 最香 / 最坑的點是什麼?
- 下一期想先看 Solr 還是 Elasticsearch ?留言告訴我,我來插隊!
對搜索技術感興趣的朋友,歡迎關注《搜索百科》專欄,一起探討與學習!
原文:https://infinilabs.cn/blog/2025/search-wiki-1-lucene/