Lucene.net入門學習系列(2)

      Lucene.net入門學習系列(1)-分詞html

  Lucene.net入門學習系列(2)-建立索引學習

  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

   索引建立好了以後,咱們還能夠根據需求來對索引進行不一樣的優化,以達到更好的檢索效果。索引

相關文章
相關標籤/搜索