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. 【百度地图API】如何利用自己的数据制作社交地图?只显示可视区域内的标注

    原文:[百度地图API]如何利用自己的数据制作社交地图?只显示可视区域内的标注 摘要:如果你自己的数据已经超过1万个,如何进行合理的显示?除了聚合marker外,还有一个办法.那就是,只显示可视区域内 ...

  2. CocoaPods 建立私有仓库

    CocoaPods是iOS,Mac下优秀的第三方包管理工具,类似于java的maven,给我们项目管理带来了极大的方便. [个人或公司在开发过程中,会积累很多可以复用的代码包,有些我们不想开源,又想像 ...

  3. swift学习:第一个swift程序

    原文:swift学习:第一个swift程序 最近swift有点火,赶紧跟上学习.于是,个人第一个swift程序诞生了... 新建项目

  4. 关于fork()函数的作用

    (1)    先看一个实例: #include <unistd.h>; #include <sys/types.h>; main () {           pid_t pi ...

  5. Linux httpd 跳转简单方法一

    直接在httpd.conf中添加以下代码即可: NameVirtualHost *:80 <VirtualHost *:80> ServerName localhost ##访问域名 Re ...

  6. jQuery验证插件

    原文:jQuery验证插件 学习要点: 1.使用 validate.js 插件 2.默认验证规则 3.validate()方法和选项 4.validate.js 其他功能 验证插件(validate. ...

  7. Installshield建立IE快捷方式的方法

    原文:Installshield建立IE快捷方式的方法 实现方法:在project assistant里或者install design里随便建一个快捷方式,然后去install design里修改刚 ...

  8. oracle 非数字型转数字型

    原文:oracle 非数字型转数字型 oracle中如果一个字段内容不全是数字型 可以通过以下方式过滤 to_number(substr(translate(a.vital_signs_cvalues ...

  9. Java集合之HashMap源码实现分析

    1.简介 通过上面的一篇随笔我们知道了HashSet的底层是采用Map实现的,那么Map是什么?它的底层又是如何实现的呢?这下我们来分析下源码,看看具体的结构与实现.Map 集合类用于存储元素对(称作 ...

  10. leetcode第37题--Count and Say

    题目:(据说是facebook的面试题哦) The count-and-say sequence is the sequence of integers beginning as follows:1, ...