在資訊爆炸的時代,網站若缺乏強大的站內搜尋功能,使用者將難以快速定位所需內容。Lucene.NET 作為 Apache Lucene 的 .NET 移植版,提供了成熟的全文檢索架構,包含索引引擎、查詢引擎與文本分析引擎,是實現高效站內搜尋的首選工具包。本文將從環境部署、索引管理、搜尋邏輯到關鍵字高亮,完整呈現一個可直接落地的解決方案。
首先從官方渠道下載最新版 Lucene.NET 套件,並引入中文分詞神器 PanGuAnalyzer(盤古分詞),以解決中文斷詞難題。專案結構建議分層:Model 定義資料實體,BLL 封裝業務邏輯,Common 存放輔助工具類。
採用 FSDirectory 將索引持久化至磁碟,配合 NativeFSLockFactory 防止併發衝突。程式啟動時自動檢測索引目錄是否被鎖定(如異常退出導致),若鎖定則自動解鎖,確保系統穩健性。
採用「先刪後增」模式:以文件唯一識別碼(FileName)為鍵,先呼叫 DeleteDocuments 移除舊索引,再重新寫入最新資料。欄位存儲策略如下:
Field.Index.NOT_ANALYZED,精確匹配,不分詞Field.Index.ANALYZED 配合 TermVector.WITH_POSITIONS_OFFSETS,支援全文檢索與片段高亮提供單獨的 DeleteIndex 方法,同樣處理鎖定邏輯,確保刪除操作原子性。
// 核心索引建立邏輯片段
IndexWriter writer = new IndexWriter(directory, new PanGuAnalyzer(), !isUpdate, IndexWriter.MaxFieldLength.UNLIMITED);
writer.DeleteDocuments(new Term("id", item.FileName));
Document doc = new Document();
doc.Add(new Field("id", item.FileName, Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("title", title, Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("body", body, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
doc.Add(new Field("url", item.FilePath, Field.Store.YES, Field.Index.NOT_ANALYZED));
writer.AddDocument(doc);
writer.Close(); directory.Close();
使用 PhraseQuery 結合盤古分詞,將使用者輸入關鍵字拆解為詞條陣列,針對 body 欄位進行短語查詢。設定 SetSlop(100) 允許詞條間最多 100 個位置間距,兼顧精確度與包容性。
透過 TopScoreDocCollector 獲取前 1000 筆最高分文檔,配合 IndexSearcher.Doc() 取回完整 Document,映射為 SearchResult 實體集合。
利用 PanGu.HighLight.Highlighter 自動提取包含關鍵字的最佳片段(預設 100 字元),並以紅色字體標記關鍵字,大幅提升使用者閱讀體驗。
// 搜尋核心邏輯片段
foreach (string word in SplitWord(keywords)) {
query.Add(new Term("body", word));
}
query.SetSlop(100);
TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true);
searcher.Search(query, null, collector);
// 結果映射與高亮處理
string bodyPreview = highlighter.GetBestFragment(keyword, body);
MergePolicy 控制段合併頻率;大型索引考慮分片。Lucene.Net.Store.AzureDirectory 支援雲端儲存;整合 Lucene.Net.Analysis.SmartCn 強化中文語義分析。

Lucene.NET 搭配盤古分詞,以不足 200 行核心代碼實現了專業級站內搜尋:支援中文分詞、短語查詢、關鍵字高亮、索引增量維護。開發者可直接將本文代碼整合至現有 ASP.NET 專案,快速賦予系統強大的資訊檢索能力。