盘古 + Lucene 实现 .NET 分词 + 全文检索-全文检索

作者:vkvi 来源:千一网络(原创) 日期:2017-6-29

在本连载前一节中,我们提到了有个下载地址,这里面还有两个重要 DLL:Lucene.Net.dllPanGu.Lucene.Analyzer.dll,是用于全文检索的,PanGu.Lucene.Analyzer 是盘古针对 Lucene 写的分析器,我们也可以不用它的。

盘古的文档中也提到了具体使用方法,但是它使用的一些方法是 Lucene 抛弃的方法,本文使用的是 Lucene 推荐的方法。

先还是照前一节的操作添加并引用 DLL。

创建索引

要使用全文检索,我们得把我们的文章加入索引。

  • Store.YES 检索时可以用 IndexSearcher.Doc(i).GetField 获取内容。
  • Store.NO 检索时不可用 IndexSearcher.Doc(i).GetField  获取内容,由于不保存内容所以节省空间。
  • Store.COMPRESS 检索时可以用 IndexSearcher.Doc(i).GetField 获取内容,可以节省生成索引文件的空间。

IndexWriter 第三个参数为 true,true 在这里有两层含义:

  • 如果不存在就创建。
  • 如果存在就覆盖。

我们应该在第一次使用时,为其赋 true 值,在后期追加时使用 false 值。

检索

这里有几点说明:

  • 一是要写一个 GetKeyWordsSplitBySpace 方法。
  • 二是 QueryParser 是单字段搜索,多字段搜索用 MultiFieldQueryParser。或者也可用 PanGu 文档中的用法(代码见下)。二者效果是不太一样的。
  • 三是 Search 第二个参数是最大返回条数。
  • 四是如果我们搜“技术”,第二条“水稻栽培技术”就不出来结果,这是为什么呢?采用盘古分词,我们发现“机械维修技术”被分为:机械、维修、技术,而“水稻栽培技术”被分为:水稻、栽培技术,这下明白原因了吧。

最后结合前一节介绍的,就可实现摘要高亮

分词修改

前面说了关于这个分词,会影响搜索结果,我们可以用下载的文件包中的 DictManage.exe 来维护分词。

要说明两点:

  • 一是修改了分词,要保存。
  • 二是要重新用 IndexWriter 写入索引。

你前面那位网友看了:微信公众号中的这种列表怎么做的?

▲▲▲嘿,欢迎转载传播本站原创文章,尽量保留来源噢。▲▲▲

文章评论
标题:必填
内容:
vkvi
vkvi

作者简介: vkvi,致力于 .NET Web 开发、移动开发的技术推广,在 .NET、SQL Server、Windows Server 等方面有深入研究和丰富经验,10 年间共计撰写文章 4000 余篇。 主持金融、国土、农业、电商等多个行业项目执行, 推行“技术提升生产力、人心决定成功率”的管理理论。 联系他