solr:关于spell的优化效果

一、lucene里边,有三个算法去计算拼写纠错的相似度。

1、Edit Distance(编辑距离)

算法原理:从一个字符串A经过增删改的步数,变成另外一个字符串B,这个步数最少的时候,就是为A与B之前的 编辑距离。

2、jaro-winkler distance(基于编辑距离的修改)

算法原理:两个给定字符串S1和S2的Jaro Distance为:

 

image

  • m是匹配的字符数;
  • t是换位的数目

这种算法,减少了由于字符匹配,而字符位置不同,而造成的影响。


详情参考 :http://blog.csdn.net/chaoswork/article/details/5489877

3、 Ngram 算法。

算法原理:简单的 N元切分。例如,2元,将目标A字符串(假如为 “测试字符串”),就可以分为 “测试”,“试字”,“字符”,“符串”。跟B字符串(“实测字符串”,分为 “实测”,“测字”,“字符”,“符串”。)再比较两个字符串list的的重合次数。

二、solr提供 的spell的默认纠错功能,其实要结合业务的话,比较难。

默认的,纠错功能是这个样子的: 选取 一个或者多个的 solrspellchecker(根据不同的算法或者逻辑提供suggestions),然后,合并搜索结果,根据一定规则(默认的规则是先按 编辑距离 排序,再按hit目标的term的个数排序)进行suggestions排序。这样的方法,并没有 结合实际的业务,而实际的业务,往往要加入 query的 热度的这个维度。这样业务的东西要插进去的话,就会比较麻烦。选取最好最合适的插入方式,这个很关键,因为如何不选取到最合理的方式的话,极有可能会影响到其它的功能。

三、solr 中的spell的代码逻辑


四、加入对spell修改的具体方法。

1、修改 相似度的算法,加入自定义的相似度算法。

2、修改SuggestWordSorceComparator的 比较方法(toCompare),

3、修改SuggestWord的score的值,这里可以修改 score 为加入自己的业务打分与相似度打分的相加的最终值。 这样子修改,不一定是合理的,但是应该是可行的。

4、修改spellCheckCollation中的internalRank(内部的排序顺序),其是在SpellCheckCollator中的L125中掉作用了。这种情况的修改,是基于spellCheckCollater的最后的将得到的结果再一次调用solrindexSearcher。在这些搜索中,修改原来的termquery为按命中后的打分排序,而不是hits的次数排序。可能要在spellCheckCollation中加入score,记录打分,也可能不需要记录打分,只需要顺序,具体看业务。在 这个地方修改,加入业务打分,不一定是合理的,但是应该是可行的。


五、更具四中的4,深入代码层的修改

1、由于是调用solrindexSearcher的再次搜索,而原先的solrindexSearcher有可能已经是被修改过了,即已经加入了 业务的打分之后的排序,直接可以得到每次搜索的sorce,有可能已经是在solrindexSearcher 中search之后的顺序,已经是加入了业务的打分之后的排序。但是,加入了业务打分之后的顺序,在search之后得到的response的实例里边,不一定要 results的加业务打分之后的打分 。只有当得到了这些打分之后,才可能才能够在多次搜索(针对纠错结果集)中得到分数排序。

2、可以在SpellCheckCollator中的L114中的log中得到maxAllSorce

如果要提供跟多的数据以便于业务的需要,这个 first result的的 lucenesorce+busniesssorce就要得到才行

转载于:https://my.oschina.net/momohuang/blog/158065

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值