我的自定义相似度类PercentageSimilarityClass
已添加到类加载器中,但结果与之前的排名相同。
这是我的代码。我做错了什么?
package org.apache.lucene.search.similarities;
import org.apache.lucene.search.similarities.DefaultSimilarity;
public class PercentageSimilarityClass extends DefaultSimilarity {
@Override
public float coord(int overlap, int maxOverlap) {
return ((overlap /(float)maxOverlap)*(overlap/(float)maxOverlap));
}
@Override
public float queryNorm(float sumOfSquaredWeights) {
return (float) 1.0;
}
@Override
public float tf(float freq) {
return (float) 1.0;
}
@Override
public float sloppyFreq(int distance) {
return (float) 1.0;
}
@Override
public float idf(long docFreq, long numDocs) {
return (float) 1.0;
}
}
我也尝试添加
public PercentageSimilarityClass(){
super();
}
但它并没有什么区别。
非常感谢任何帮助!
修改
我希望Solr根据文档中找到的查询字数来对文档进行排名;词越多,排名越高。
所以,我试图增加coord()
因子的权重(通过平方),并减少其他因素(通过让它们返回(float) 1.0
)。
我已经计算出每个返回文档的百分比是由查询的单词构成的,并且在我添加自定义相似度之前和之后,我排名前十的文档都得到了百分比
21.74%
12.5%
15.38%
27.59%
10.34%
44.44%
37.5%
14.29%
19.3%
20.0%
由查询的单词组成的44.44%的文档应该在这个实例中排名第一,当我将搜索扩展到10个以上的文档,到100或500个文档时,我会得到许多文档,这些文档是70%+由单词组成在查询字词中,尚未排名第一。