dotLucene(2)

其實,依照 dotLucene 網站所提供的 Tutorial,就已經蠻足夠的了.不過我還是同時參考了源碼裡所附的 Demo.
這邊我就只寫出跟 Tutorial / Demo 不同的地方…
1.在 Document 部分,我參考了 Demo 的寫法, 另外寫了一個 FileDocument, 來產生 IndexWriter 所需要的 Document 類別.

public class FileDocument
{
public static Document Document( string title, string content)
{
// make a new, empty document
Document doc = new Document();
// Add necessary fields
// 這邊要 tokenized, 為了中文…
doc.Add( new Field(“title”, title, Field.Store.YES, Field.Index.TOKENIZED));
// Add the contents of the file to a field named “contents”.
// 原來是用 stream reader 來把整個檔案內容讀進來
// 這邊改成只把欄位資料放進去.
doc.Add( new Field(“contents”, content, Field.Store.YES, Field.Index.TOKENIZED));
// return the document
return doc;
}
private FileDocument()
{
}

2. 我把原來的 QueryParser 改成 MultiFieldQueryParser, 因為我想同時搜索主旨與內容.

string[] fields = { “title”, “contents” };
Query query = MultiFieldQueryParser.Parse( txtQueryString.Text, fields, analyzer );
Hits hits = searcher.Search(query);

大致上就這樣子…
我之後想搞一個進度顯示,讓使用者不會覺得太慢,不過怎麼樣都不行.
這應該就要應用所謂的 UI/worker thread 的技術了吧…
真的是對 Windows form.Net 太不熟了…
這再慢慢摸索吧…

dotLucene(1)

上星期逛網路的時候,不小心讓我給逛到 Lucene
*Lucene:基于Java的全文检索引擎简介
*DotLucene:37行代码实现全文搜索
*DotLucene: Full-Text Search for Your Intranet or Website using 37 Lines of Code
雖然以前就大略知道 Lucene, 但卻搞不太清楚他是幹麼的,逛完這幾篇之後,才知道是幹麼的.
於是就很想應用在紅狐論壇上.
上面的文章都是很不錯的入門文章,但是在我一開始投入的時候,的確讓我有很多困擾:
1.例子多半都是用 File / Directory 當作範例,真的可以用來搜索資料庫嗎?
2.又資料庫本身就有不錯的全文檢索,那麼,還需要這個嗎??
3.DotLuceneFbDirectory: DotLucene Index Storage for Firebird 這篇文章說可以拿 Firebird database 當作 storage, 那麼,我需要參考這篇文章這麼作嗎??
想了兩三天,也仔細看了兩三天…
1. 的確可以, dotLucene 有提供 Document 類別,而此類別可以讓你自由添加 Field 進去,所以我可以直接添加 Table 裡的某些欄位進去. 在 asp.net 上應用時,我可以參考這些我自定的欄位來產生網址,讓使用者可以直接點選網址進入.
2. 像 Microsoft SQL server 的確有提供全文檢索功能,可是據說很費效能. dotLucene 還不錯,搜索的時候速度蠻快的,也沒花什麼資源(用工作管理員觀察),不過這部分還需要詳細的實驗才知道.
3. 仔細看完這篇文章以後,才發現,雖然可以利用 database 當作 storage,可是並不建議,因為效能不高. 可惜的是文章內容並沒有提供效能評比,無法作進一步的比較.
在整個考量以後,決定先以紅狐所提供的論壇資料作為一個練習,也可以順便作一些實驗.