Lucene.net入门学习系列(2)
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类)中。
索引创建好了之后,我们还可以根据需求来对索引进行不同的优化,以达到更好的检索效果。
Lucene.net入门学习系列(2)的更多相关文章
- Lucene.net入门学习系列(1)
Lucene.net入门学习系列(1) Lucene.net入门学习系列(1)-分词 Lucene.net入门学习系列(2)-创建索引 Lucene.net入门学习系列(3)-全文检索 这几天在公 ...
- Asp.Net MVC5入门学习系列③
原文:Asp.Net MVC5入门学习系列③ 添加一个视图(View) 接着上篇的入门系列,上面解说添加一个简单Controller(控制器),这里我们简单的在来添加一个View(视图)来展示我们Co ...
- Asp.Net MVC5入门学习系列②
原文:Asp.Net MVC5入门学习系列② 添加一个Controller(控制器) 因为我们用的是Asp.Net MVC,MVC最终还是一套框架,所以我们还是需要遵循它才能玩下去,或者说是更好的利用 ...
- Asp.Net MVC5入门学习系列①
原文:Asp.Net MVC5入门学习系列① 现在直接开始MVC5的学习系列,学习资源来自Micrsoft. 开始使用Asp.Net MVC 5 打开Visual Studio 2013,然后新建一个 ...
- Asp.Net MVC5入门学习系列⑦
原文:Asp.Net MVC5入门学习系列⑦ 接着上篇结尾所说,如果开发中刚才遇到Model需要添加或者减少字段/属性的话,但是刚好你也利用EF的Code frist通过Model生存的数据库,这时改 ...
- Asp.Net MVC5入门学习系列⑤
原文:Asp.Net MVC5入门学习系列⑤ 检查VS生产的编辑方法和编辑窗体 前面我们一步使用强类型,然后创建Controller(控制器)的时候,VS默认已经给我们把CURD都简单的实现了.这篇的 ...
- Asp.Net MVC5入门学习系列⑥
原文:Asp.Net MVC5入门学习系列⑥ 接着上次的篇幅,我们这篇手动来写一个查询的流程代码! 搜索/查询 流程功能的实现 那现在要做搜索(查询)功能我们第一步应该做什么呢!第一次是不是我们应该去 ...
- Asp.Net MVC5入门学习系列④
原文:Asp.Net MVC5入门学习系列④ 添加Model且简单的使用EF 对于EF(EntityFramework)不了解的朋友可以去百度文科或者在园子里搜一些简资源看下,假如和我一样知道EF的概 ...
- Lucene.net入门学习
Lucene.net入门学习(结合盘古分词) Lucene简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全 ...
随机推荐
- android 卸载程序、清除数据、停止服务用法
要实现卸载程序.清除数据.停止正在执行的服务这几大模块,如今将代码粗略总结例如以下: 主要运用到的类有 PackageManager ActivityManager ApplicationInfo R ...
- outlook自动备份
在 这里 下载 http://support.microsoft.com/kb/238782
- IOS中 init和initialize
一.init和initialize 1.方法类型 1> init属于对象方法,-开头 2> initialize属于类方法,+开头 2.调用时刻 1> init:每个对象初始化的时候 ...
- dom01
事件冒泡:即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播至最不具体的那个节点(文档). 事件捕获:即不太具体的节点应该更早接收到事件,而最具体的节点最后接收到事件. ...
- jquery.validate 以alert方式显示错误方法
$.validator.setDefaults({ submitHandler: function() { alert("submitted!");return false; } ...
- DOM2级事件对象、添加事件、阻止默认事件、阻止冒泡事件、获取事件对象目标的兼容处理
事件对象——兼容处理 /* * 功能: 事件对象兼容 * 参数: 表示常规浏览器的事件对象e */ function getEvent(e) { // 如果存在e存在,直接返回,否则返回window. ...
- Ninject.Extensions.
最近在使用IoC进行一个较复杂的项目进行架构,在IoC的选择上让我很是纠结.首先我不喜欢大量的配置文件进行配置,那简直是噩梦,比学习一门编程语言还痛苦.我喜欢前一段时间看EF的CodeFirst的那种 ...
- Windows在结构objective C开发环境
对于近期打算iPhone.iPod touch和iPad开发一些应用程序,所以.需要开始学习Objective C(苹果推出的类似C语言的开发语言).因为苹果的自我封闭的产业链发展模式(从芯片.机器. ...
- 推荐两个针对github的chrome插件
作为一只程序猿,在github上找代码.看代码是再正常不过的事情了.这时候有个工具可以方便你翻看代码,想必是极好的. Sourcegraph for GitHub 这个插件允许你像使用IDE那样浏览代 ...
- C# 文件下载类
using System; using System.Net; using System.IO; using System.Text; using System.Web; using System.W ...