返回> 网站首页 

HubbleDotNet 和 Lucene.Net 匹配相关度的比较

yoours2010-09-15 17:01:49 阅读 1125

简介一边听听音乐,一边写写文章。

         在使用 Lucene.net (Lucene java 版本也是一样)后会感觉Lucene.net 的匹配相关度存在问题,搜索得到的结果往往不是希望的结果,不完全匹配的记录往往比完全匹配的记录排序还要靠前,很多人试图通过分词来解决,中文环境搜索,分词确实能解决一些问题,但不能根本解决问题,而英文环境下,分词根本无法解决任何问题。问题的本质是由于Lucene的得分算法缺陷造成的,不改进得分算法根本不能根本解决问题。HubbleDotNet的得分算法参考了Lucene的得分算法并做了重大改进,匹配相关度比Lucene.net 有了显著提高。本文结合一个极端的例子来分析两者得分算法的异同,并从原理上讲解为什么HubbleDotNet 的匹配相关度要比Lucene.net 的高。

先看例子
      我们对下面两条记录分别用 Lucene.net 2.9.1 和 HubbleDotNet 0.9.7.1 进行索引。
记录1
      教育问题一直是国家最关心的,我们要长抓不懈
记录2
     教育独生子女问题,这是很多家长要关心的问题
 
分词采用盘古分词,分词参数中关闭多元分词。
两个句子的分词结果分别为:
教育/问题/一直/是/国家/最/关心/的/我们/要/长抓/不懈/
教育/独生子女/问题/这/是/很多/家长/要/关心/的/问题/
 
要搜索的句子是:教育问题
其分词结果为:教育/问题/
         从直观上看,记录1 是完全匹配,应该得分比记录2高,这也是我们希望的排序结果,即记录1排在第一个,记录2排第二个。
 
下面看看实际的排序结果:
Lucene.net 的排序结果:(这是盘古分词带的Lucene.net 的例子稍作改动后(将得分输出了)的输出结果) 从结果我们可以看出记录2被排在了第一位,得分为 0.042; 而记录1 的得分为 0.034 排第二位,这个显然不是我们希望的结果。
 
再看HubbleDotNet的结果
这里我们看到记录1被排在第一位,得分为 390218522;记录2 排第二位,得分 85937
 

http://www.cnblogs.com/eaglet/archive/2010/09/07/1820267.html
微信小程序扫码登陆

文章评论

1125人参与,0条评论