- 盘古 + Lucene 实现 .NET 分词 + 全文检索-盘古分词
- 盘古 + Lucene 实现 .NET 分词 + 全文检索-全文检索
- 盘古 + Lucene 实现 .NET 分词 + 全文检索-更新、删除全文文档
- 盘古 + Lucene 实现 .NET 分词 + 全文检索-Stopword、字典配置
在本连载前一节中,我们提到了有个下载地址,这里面还有两个重要 DLL:Lucene.Net.dll、PanGu.Lucene.Analyzer.dll,是用于全文检索的,PanGu.Lucene.Analyzer 是盘古针对 Lucene 写的分析器,我们也可以不用它的,比如可以用自带的:new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29)。
盘古的文档中也提到了具体使用方法,但是它使用的一些方法是 Lucene 抛弃的方法,本文使用的是 Lucene 推荐的方法。
先还是照前一节的操作添加并引用 DLL。
创建索引
要使用全文检索,我们得把我们的文章加入索引。
- Store.YES 检索时可以用 IndexSearcher.Doc(i).GetField 获取内容。
- Store.NO 检索时不可用 IndexSearcher.Doc(i).GetField 获取内容,由于不保存内容所以节省空间。
- Store.COMPRESS 检索时可以用 IndexSearcher.Doc(i).GetField 获取内容,可以节省生成索引文件的空间。
别人的教程中,IndexWriter 构造函数使用了另一个重载,即第三个参数为 bool,如果为 true 表示不存在就创建、存在就覆盖,为 false 表示不存在就出错、存在就追加。这个不方便,因为我们需要的是:不存在就创建、存在就追加,怎样才能实现这个功能呢?省略掉,就实现这个功能了。
检索
这里有几点说明:
- 一是要写一个 GetKeyWordsSplitBySpace 方法。
- 二是 QueryParser 是单字段搜索,多字段搜索用 MultiFieldQueryParser。或者也可用 PanGu 文档中的用法(代码见下)。二者效果是不太一样的。
- 三是 Search 第二个参数是最大返回条数。
- 四是如果我们搜“技术”,第二条“水稻栽培技术”就不出来结果,这是为什么呢?采用盘古分词,我们发现“机械维修技术”被分为:机械、维修、技术,而“水稻栽培技术”被分为:水稻、栽培技术,这下明白原因了吧。
最后结合前一节介绍的,就可实现摘要和高亮。
分词修改
前面说了关于这个分词,会影响搜索结果,我们可以用下载的文件包中的 DictManage.exe 来维护分词。
要说明两点:
- 一是修改了分词,要保存。
- 二是要重新用 IndexWriter 写入索引。
- 盘古 + Lucene 实现 .NET 分词 + 全文检索-盘古分词
- 盘古 + Lucene 实现 .NET 分词 + 全文检索-全文检索
- 盘古 + Lucene 实现 .NET 分词 + 全文检索-更新、删除全文文档
- 盘古 + Lucene 实现 .NET 分词 + 全文检索-Stopword、字典配置