最近在對搜索質量做優化,想解決一些文章通過重複關鍵詞的堆砌而導致搜索該關鍵詞排序很高的問題。比如搜索“遊戲”,結果一篇叫做“遊戲遊戲遊戲遊戲遊戲遊戲遊戲遊戲”的文章始終排在第一位。
體驗了一下百度貼吧,從高亮結果顯示可以看出貼吧是有對這種堆砌重複關鍵詞的情況做處理的。應該把連續重複出現的關鍵詞忽略了。下圖是貼吧搜索(相關度排序)“天天”的結果頁面:
lucene/solr提供了類似功能木有?
找個了幾個東西:
RemoveDuplicatesTokenFilter ,可惜只會移除在相同position上的分詞,沒用。
StopFilter ,可惜只能移除停用詞,用不了。
自行實現Solr重複分詞過濾器CustomerRemoveDuplicatesTokenFilter
模仿StopFilter來寫,繼承FilteringTokenFilter類,重寫protected boolean accept()方法,當出現重複分詞時就直接讓accept方法返回false,把重複的詞從索引分詞中移除掉。這裏遇到個小坑,就是一開始沒有重寫void reset()方法,結果出現各種神奇的問題。。。原來有狀態的Filter是需要實現reset方法的,在裏面把狀態清除掉。
當前solr版本:solr4.4