【簡介】
好多人都知道的吧
反正我是最近才好好的看了一下
別笑我拿歷史當新聞哦
不太了解Lucence的朋友先聽我說兩句哦
Lucene的知識主要分為索引
搜索
分析器
性能優化幾個部分
索引和搜索沒啥可說的
看幾個例子就會了
來回那一套兒
按部就班做幾個實驗就熟悉了
分析器是Lucence的精華
又分為分詞和過濾兩部分
而且中文分詞更是難點
我的例子裡是用從博客園程序中提取出來的Lucene
Net
Analysis
Cn
dll來實現中文分詞的
誰有中科院的那套中科院ICTCLAS分詞工具的C#版麻煩提供一下哦
性能優化也很重要
因為如果要索引的文件比較大的話
建立索引的性能就會很大的下降
你可以調整IndexWriter的幾個參數來優化索引性能
還有可以用IndexWriter
Optimize()方法(這個方法主要是優化查詢速度
反而使索引性能有所下降)
另外就是可以用多線程來分別對不同的內容進行索引並保存到RAMDirectory裡
然後再把所有的內存索引合並到FSDirectory裡
甚至可以讓多台服務器分別處理內容的各個部分
然後把索引結果放到一個隊列裡
再有一台機器去讀取索引結果隊列並合並索引結果
做這個示例主要是為了演示一下的功能
它可以對你指定的目錄裡的l文件進行全文索引
然後對其進行查詢
由於如果要索引的目錄裡文件特別多特別大的話
建立索引需要花費很長的過程
所以我在示例程序裡使用了異步編程
以便在建立索引的時候不阻塞界面線程
【內容】
先看一個簡單例子
public void Test
()
{
//建立一個內存目錄
Lucene
Net
Store
RAMDirectory ramDir = new Lucene
Net
Store
RAMDirectory();
//建立一個索引書寫器
IndexWriter ramWriter = new IndexWriter(ramDir
new ChineseAnalyzer()
true);
//要索引的詞
這就相當於一個個的要索引的文件
string[] words = {
中華人民共和國
人民共和國
人民
共和國
};
//循環數組
創建文檔
給文檔添加字段
並把文檔添加到索引書寫器裡
Document doc = null;
for (int i =
; i < words
Length; i++)
{
doc = new Document();
doc
Add(Field
Text(
contents
words[i]));
ramWriter
AddDocument(doc);
}
//索引優化
ramWriter
Optimize();
//關閉索引讀寫器
一定要關哦
按理說應該把上面的代碼用try括主
在finally裡關閉索引書寫器
ramWriter
Close();
//構建一個索引搜索器
IndexSearcher searcher = new IndexSearcher(ramDir);
//用QueryParser
Parse方法實例化一個查詢
Query query = QueryParser
Parse(
中華人民
contents
new ChineseAnalyzer());
//獲取搜索結果
Hits hits = searcher
Search(query);
//判斷是否有搜索到的結果
當然你也可以遍歷結果集並輸出
if (hits
Length() !=
)
MessageBox
Show(
有
);
else
MessageBox
Show(
沒有
);
}
其它的具體看下載代碼吧
下載的文件裡有個doc的文件夾
裡面有
個文本文件
大家可以試著給那個目錄建立索引
然後搜索一下
人民
中華
等幾個關鍵字
看看能出來搜索結果嗎?簡單說一下示例程序
就是遍歷一個目錄
找出所有文本和網頁的文件
建立Lucene的Document文件
並索引了文件的目錄和內容
然後添加到索引器裡
最後在程序執行目錄的Index子目錄裡建立索引
這一部分的調用使用了異步委托
搜索的時候就是在Index目錄裡檢索符合某個關鍵字的條目
【注意】
建立完索引後一定要調用IndexWriter的Close方法
否則如果你要索引的目錄裡的文件少於minMergeDocs的話
是不能建立索引的
Field
Text的靜態方法有兩個重載版本
如果第二個參數是string的話那麼這個字段既索引也存儲
如果是TextReader的話只索引不存儲
這點要搞清楚
另外在構建TextReader的時候要注意使用合適的編碼格式
否則有的文件讀出來是亂碼
建立的索引肯定也是按亂碼建立的咯
【小節】
其實lucene大家誰也是學學就會
關鍵要是整一個像google
baidu這樣的搜索引擎就難了
好歹這搜索引擎也是一個行業呢
所以誰有興趣
好好鑽研一下搜索行業的相關技術
沒准靠這個還能創業呢
是吧
再問一下
《lucence實戰》有中文版嗎?或者其它關於Lucence的中午圖書
給推薦一本
最後借貴地和大家討論一個問題
從長遠考慮
程序員學那項技術比較有前途?做程序也好幾年了
想找一個領域好好深入一下
以後做一個行業的領域專家
那樣才不會太累
要不什麼都鼓搗
太累了
而且還不容易出成績
我列舉了幾個方向
大家幫忙分析分析
謝謝
Linux+oracle(走數據庫管理的路線)
匯編
c底層驅動開發(據說很簡單
就那麼幾個指令
學一年就精通了
不像
NET
得老跟著走)
ec++
kjava嵌入式開發(包括手機游戲
路由固件等開發)
即時通訊行業(網絡編程
包括網絡游戲的服務端編程這些)
搜索行業(不太了解)
OA
工作流(自己做一套不用編程
拖拖拽拽畫畫就能實現企業業務流程的電子化
infopath
OSS
formserver
WF的那一套)
網站開發(范圍很大
要掌握的東西太多
會的人很多
深入的很少)
流媒體開發(
G時代這玩意兒不知道能不能派上用場)
【參考】
idior的《系列》
李剛
宋偉
邱哲的《ajax+lucene構建搜索引擎》
下載地址
From:http://tw.wingwit.com/Article/program/net/201311/12564.html