SOLR相关性似乎与索引的文档长度密切相关

时间:2013-04-03 13:37:01

标签: search solr

我们在SOLR中有很多文档,并且某些类型的文档在结果中得分过高(主要是因为它们的内容通常很短)。因此,如果我搜索一个名称,它将在更长的时间之前返回一大堆短文档。

如何对结果进行加权,以便在对相关性进行排名时更多地考虑文档的长度?

如果它有帮助(作为一个cludge)我们在这通常适用的文件上设置了一个标志,所以如果有可能提升所有没有设置此标志的文件,那将是我们的临时选择。

2 个答案:

答案 0 :(得分:1)

这是由得分中的lengthNorm引起的。具有相同匹配条款的较长文档的得分略低于短文档。请参阅TFIDFSimilarity的文档(向下滚动到“6. norm(t,d)”)以及Solr documentation here

这往往适用于全文搜索应用程序。这个想法是,与查询匹配的内容比例较高的文档与查询更相关。

例如,如果我搜索术语Monkey的维基百科文章标题,找到的文章的相关性可能是:

如果确实有必要,可以在自定义DefaultSimilarity中覆盖此内容。并将computeNorm(state,norm)覆盖为return state.getBoost();

答案 1 :(得分:0)

检查DefaultSimilarity的来源是否为4.0

@Override
public void computeNorm(FieldInvertState state, Norm norm) {
    final int numTerms;
    if (discountOverlaps)
        numTerms = state.getLength() - state.getNumOverlap();
    else
        numTerms = state.getLength();
    norm.setByte(encodeNormValue(state.getBoost() * ((float) (1.0 / Math.sqrt(numTerms)))));
}

所以numTerms会对得分产生负面影响 您可以创建一个覆盖行为的Custom类

  1. numTerms等于1
  2. 更改计算以增加较长文档的分数,而不是现在反向
  3. 删除计算((float) (1.0 / Math.sqrt(numTerms)))以消除lengthNorm效果。