Solr Custom Similarity Class已加载但对排名结果没有影响。为什么覆盖不起作用?

时间:2014-08-16 17:00:19

标签: java solr lucene

我的自定义相似度类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%+由单词组成在查询字词中,尚未排名第一。

0 个答案:

没有答案