Lucene.NET

之前整理的資料...

??

Lucene.NET發展歷史

在2002/7/7,NLucene 1.2在SourceForge網站上註冊,將Lucene 1.2改用C#撰寫,開始了Lucene在Microsoft .NET平台上的porting version。然而在NLucene 1.2 beta 2之後,NLucene就停頓了下來。而2003年時,另一個.NET平台的Lucene porting version - LuceneDotNet在SourceForge往站上頭註冊,繼續了原本NLucene停頓的開發工作,將Lucene 1.3以C#撰寫,以供.NET程式設計師使用。2004年11月,LuceneDotNet改名叫dotLucene,但dotLucene的開發團隊在2006年7月之後,因為無力繼續維護而轉交給Apache Software Foundation維護,並改名叫做Lucene.NET。
目前Lucene.NET的官方網頁在http://incubator.apache.org/lucene.net/
對於程式設計人員來說,Lucene.NET在使用上與原本的Lucene一樣,所有的API介面都是一致的。下面我們將舉兩個例子。例子中包含幾個檔案,這些檔案統統存放在christmas的資料夾中。

Example?#1 - 不紀錄檔案名稱的索引

在這個example中我們透過document物件來為特定檔案建立索引,但是並不儲存檔案名稱(亦即不把檔案名稱列入field中)。

Document doc = new Document();
doc.Add(new Field("filename", file.FullName, Field.Store.NO, Field.Index.UN_TOKENIZED));
doc.Add(new Field("contents", (new StreamReader(file.FullName)).ReadToEnd(), Field.Store.YES, Field.Index.TOKENIZED));

如此仍可以正確將檔案建立索引,但在搜尋時只可以得到有幾筆吻合的資料,但是將無法列出檔案名稱。

Example?#2 - 將檔案路徑一併加入索引

在這個example中我們透過document物件來為特定檔案建立索引,但是在索引的部份一並將檔案的路徑加入索引當中。

Document doc = new Document();
doc.Add(new Field("filename", file.FullName, Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.Add(new Field("contents", (new StreamReader(file.FullName)).ReadToEnd() + " " + file.FullName, Field.Store.YES, Field.Index.TOKENIZED));

如此不僅可以正確將檔案內容建立索引,且在搜尋時還可以輸入檔案路徑的部份關鍵字來作搜尋,我們輸入christmas仍可以找到結果。

Example?#3 - 一般的索引

doc.Add(new Field("filename", file.FullName, Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.Add(new Field("contents", (new StreamReader(file.FullName)).ReadToEnd(), Field.Store.YES, Field.Index.TOKENIZED));