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

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

 
 
分类: c#Lucene.net

Lucene.net入门学习系列(2)的更多相关文章

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

    Lucene.net入门学习系列(1)   Lucene.net入门学习系列(1)-分词 Lucene.net入门学习系列(2)-创建索引 Lucene.net入门学习系列(3)-全文检索 这几天在公 ...

  2. Asp.Net MVC5入门学习系列③

    原文:Asp.Net MVC5入门学习系列③ 添加一个视图(View) 接着上篇的入门系列,上面解说添加一个简单Controller(控制器),这里我们简单的在来添加一个View(视图)来展示我们Co ...

  3. Asp.Net MVC5入门学习系列②

    原文:Asp.Net MVC5入门学习系列② 添加一个Controller(控制器) 因为我们用的是Asp.Net MVC,MVC最终还是一套框架,所以我们还是需要遵循它才能玩下去,或者说是更好的利用 ...

  4. Asp.Net MVC5入门学习系列①

    原文:Asp.Net MVC5入门学习系列① 现在直接开始MVC5的学习系列,学习资源来自Micrsoft. 开始使用Asp.Net MVC 5 打开Visual Studio 2013,然后新建一个 ...

  5. Asp.Net MVC5入门学习系列⑦

    原文:Asp.Net MVC5入门学习系列⑦ 接着上篇结尾所说,如果开发中刚才遇到Model需要添加或者减少字段/属性的话,但是刚好你也利用EF的Code frist通过Model生存的数据库,这时改 ...

  6. Asp.Net MVC5入门学习系列⑤

    原文:Asp.Net MVC5入门学习系列⑤ 检查VS生产的编辑方法和编辑窗体 前面我们一步使用强类型,然后创建Controller(控制器)的时候,VS默认已经给我们把CURD都简单的实现了.这篇的 ...

  7. Asp.Net MVC5入门学习系列⑥

    原文:Asp.Net MVC5入门学习系列⑥ 接着上次的篇幅,我们这篇手动来写一个查询的流程代码! 搜索/查询 流程功能的实现 那现在要做搜索(查询)功能我们第一步应该做什么呢!第一次是不是我们应该去 ...

  8. Asp.Net MVC5入门学习系列④

    原文:Asp.Net MVC5入门学习系列④ 添加Model且简单的使用EF 对于EF(EntityFramework)不了解的朋友可以去百度文科或者在园子里搜一些简资源看下,假如和我一样知道EF的概 ...

  9. Lucene.net入门学习

    Lucene.net入门学习(结合盘古分词)   Lucene简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全 ...

随机推荐

  1. hadoop 2.2.0集群安装

    相关阅读: hbase 0.98.1集群安装 本文将基于hadoop 2.2.0解说其在linux集群上的安装方法,并对一些重要的设置项进行解释,本文原文链接:http://blog.csdn.net ...

  2. 伺服驱动器UVW电机电源线相序错误

       我们有必要先了解此讨论的前提:编码器初始安装相位正确.伺服驱动器将全然"採信"电机编码器的初始安装相位所表征的电机电角度相位,无需在伺服电机 的UVW动力线接线连接后进行额外 ...

  3. qml能够这么玩

    Qt 5以后qmlscene被qml所替代,/usr/bin/qml能够用来执行.qml文件.所以,我们就能够和sh一样的来写界面了. #!/usr/bin/env qml import QtQuic ...

  4. C语言库函数大全及应用实例五

    原文:C语言库函数大全及应用实例五                                                 [编程资料]C语言库函数大全及应用实例五 函数名: getcurdi ...

  5. T-SQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst、语言版本影响!

    原文:T-SQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst.语言版本影响! CSDN 的 Blog 太滥了!无时不刻地在坏! 开始抢救性搬家 ...

  6. 经常使用Javascript CDN 对照

    [前言] 请参阅某种网上文章: http://c7sky.com/javascript-libraries-cdn.html 本文加入的各个cdn对一些库的更新情况.以及响应时间. [更新] 发表文章 ...

  7. Android正在使用Handler实现消息分发机制(两)

    在开始这篇文章之前,.首先,我们在总结前两篇文章Handler, Looper和MessageQueue像一些关键点: 0)在创建线程Handler之前,你必须调用Looper.prepare(), ...

  8. C#网络编程系列(两)它Socket同步TCPserver

    声明原文 笔者:竹zz  本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程系列文 ...

  9. asp.net如何实现word文档在线预览

    原文:asp.net如何实现word文档在线预览 实现方式:office文档转html,再在浏览器里面在线浏览 1.首先引入com组件中office库,然后在程序集扩展中引入word的dll 2.将M ...

  10. javascript脚本化文档

    1.getElememtById /** * 获取指定id的的元素数组 */ function getElements(/*ids...*/) { var elements = {}; for(var ...