Lucene.net入门学习系列(2)

      Lucene.net入门学习系列(1)-分词

  Lucene.net入门学习系列(2)-创建索引

  Lucene.net入门学习系列(3)-全文检索

  

  在使用Lucene.net进行全文检索之前,需要写入索引,然后对索引进行检索。下面我们来看看如何建立索引。

  具体步骤如下:

  1.使用FSDirectory类打开一个索引文件

  2.使用IndexWriter类写来写索引

  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类)中。

   索引创建好了之后,我们还可以根据需求来对索引进行不同的优化,以达到更好的检索效果。

posted @ 2013-08-12 09:42  G1mist  阅读(2005)  评论(6编辑  收藏  举报