0

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

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

如果它有帮助(作为一个杂物),我们会在通常适用的文档上设置一个标志,因此如果可以提升所有没有设置此标志的文档,这对我们来说将是一个临时选项。

4

2 回答 2

1

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

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

例如,如果我在维基百科文章标题中搜索“猴子”一词,则找到的文章的相关性可能是:

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

于 2013-04-03T16:10:57.683 回答
0

检查4.0的DefaultSimilarity的来源

@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 对评分有不利影响。
您可以创建一个覆盖行为的自定义类

  1. numTerms 等于 1
  2. 更改计算以增加较长文档的分数,而不是现在相反
  3. 删除计算((float) (1.0 / Math.sqrt(numTerms)))以消除 lengthNorm 效应。
于 2013-04-04T04:01:27.247 回答