最近在对搜索质量做优化,想解决一些文章通过重复关键词的堆砌而导致搜索该关键词排序很高的问题。比如搜索“游戏”,结果一篇叫做“游戏游戏游戏游戏游戏游戏游戏游戏”的文章始终排在第一位。
体验了一下百度贴吧,从高亮结果显示可以看出贴吧是有对这种堆砌重复关键词的情况做处理的。应该把连续重复出现的关键词忽略了。下图是贴吧搜索(相关度排序)“天天”的结果页面:
lucene/solr提供了类似功能木有?
找个了几个东西:
RemoveDuplicatesTokenFilter ,可惜只会移除在相同position上的分词,没用。
StopFilter ,可惜只能移除停用词,用不了。
自行实现Solr重复分词过滤器CustomerRemoveDuplicatesTokenFilter
模仿StopFilter来写,继承FilteringTokenFilter类,重写protected boolean accept()方法,当出现重复分词时就直接让accept方法返回false,把重复的词从索引分词中移除掉。这里遇到个小坑,就是一开始没有重写void reset()方法,结果出现各种神奇的问题。。。原来有状态的Filter是需要实现reset方法的,在里面把状态清除掉。
当前solr版本:solr4.4