Lucene.net入門學習系列(3)-全文檢索優化
在使用Lucene.net進行全文檢索以前,須要寫入索引,而後對索引進行檢索。下面咱們來看看如何創建索引。spa
具體步驟以下:.net
1.使用FSDirectory類打開一個索引文件code
2.使用IndexWriter類寫來寫索引htm
3.關閉IndexWriter 對象
1 /// <summary> 2 /// 建立索引 3 /// </summary> 4 private void CreateIndex() 5 { 6 //索引的文件存放的路徑 7 string indexPath = @"\Lucene"; 8 9 //FSDirectory是用於對文件系統目錄的操做的類 10 FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexPath), new NativeFSLockFactory()); 11 //檢查目錄是否存在 12 bool isUpdate = IndexReader.IndexExists(directory); 13 14 if (isUpdate) 15 { 16 //目錄存在則判斷目錄是否被鎖定,被鎖定就解鎖 17 if (IndexWriter.IsLocked(directory)) 18 { 19 IndexWriter.Unlock(directory); 20 } 21 } 22 //IndexWriter主要用於寫索引 23 //方法簽名:public IndexWriter(Directory d,Analyzer a,boolean create,IndexWriter.MaxFieldLength mfl) 24 //第一個參數是 (Directory d):索引的目錄(前面的FSDirectory類的對象) 25 //第二個參數是 (Analyzer a):分析器(這裏咱們用盤古分詞的分析器) 26 //第三個參數是 (boolean create):是否建立目錄 27 //第四個參數是 (IndexWriter.MaxFieldLength):最大長度 28 IndexWriter writer = new IndexWriter(directory, new PanGuAnalyzer(), !isUpdate, 29 IndexWriter.MaxFieldLength.UNLIMITED); 30 31 //BLL層的一個類,用於對錶T_Article進行操做 32 //T_Article表中有三個字段: Id Title Message 33 T_ArticleBLL bll = new T_ArticleBLL(); 34 35 //遍歷T_Article表中的內容 36 foreach (T_Articles art in bll.GetAll()) 37 { 38 writer.DeleteDocuments(new Term("id", art.ID.ToString())); 39 40 //Document文檔對象 41 Document document = new Document(); 42 43 //將T_Articles表中的內容寫入索引 44 document.Add(new Field("id", art.ID.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED)); 45 46 document.Add(new Field("title", art.Title, Field.Store.YES, Field.Index.ANALYZED, 47 Field.TermVector.WITH_POSITIONS_OFFSETS)); 48 49 document.Add(new Field("msg", art.Message, Field.Store.YES, Field.Index.ANALYZED, 50 Field.TermVector.WITH_POSITIONS_OFFSETS)); 51 writer.AddDocument(document); 52 } 53 //要記得關閉 54 writer.Close(); 55 directory.Close(); 56 }
在上面的例子中,咱們使用FSDirectory類來對索引文件進行操做,要注意的是索引不光能夠寫到文件中,索引也能夠寫到內存(使用RAMDirectory類)中。blog
索引建立好了以後,咱們還能夠根據需求來對索引進行不一樣的優化,以達到更好的檢索效果。索引