1. 需求原因
由于对于关键字的处理会发生如下情况:
搜索关键字---你好,会命中如下情况
“你好你好你好” 和 “你好”
前者score要比后者大很多,在根据score的评分中,会排在前面,影响用户体验
2. 解决办法:
修改评分规则,忽略关键字重复所产生的不必要权重
重写lucene的 DefaultSimilarity中 tf(float freq)方法, 在solr源码的中新建ConstTfSolrSimilarity类:
package com.mycompany.solr.util;
import org.apache.lucene.search.similarities.DefaultSimilarity;
/**
* tf(t in d) = 1
* @author
* @version V1.0 2016-05-20
*/
public class ConstTfSolrSimilarity extends DefaultSimilarity{
@Override
public float tf(float freq) {
return 1.0f;
}
@Override
public String toString() {
return "ConstTfSolrSimilarity";
}
}
把这个类打成jar包,eclipse打jar包的方法也比较简单。
3. 配置过程:
3.1 将所给的ConstTfSolrSimilarity.jar 文件复制到tomcat下的: webapps\solr\WEB-INF\lib里面;
3.2 在schema.xml配置文件中添加如下配置:
<similarity class="com.goodjobs.solr.util.ConstTfSolrSimilarity">
</similarity>
3.3 重启tomcat后,配置即可生效。