熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

Lucene.net的全新體驗

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

From:http://tw.wingwit.com/Article/program/net/201311/12564.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.