动态

详情 返回 返回

搜索百科(1):Lucene —— 打開現代搜索世界的第一扇門 - 动态 详情

大家好,我是 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 的企業級搜索平台如何讓搜索變得更簡單。

💬 三連互動

  1. 你或公司最近在用 Lucene 嗎?拿來做了什麼場景?
  2. 你覺得 Lucene 最香 / 最坑的點是什麼?
  3. 下一期想先看 Solr 還是 Elasticsearch ?留言告訴我,我來插隊!

對搜索技術感興趣的朋友,歡迎關注《搜索百科》專欄,一起探討與學習!

原文:https://infinilabs.cn/blog/2025/search-wiki-1-lucene/
user avatar tangpanqing 头像 lovehx_58bc3f5518bf4 头像 ruochuan12 头像 jiangdaoyidezuoyeben 头像
点赞 4 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.