我们在SOLR中有很多文档,并且某些类型的文档在结果中得分过高(主要是因为它们的内容通常很短)。因此,如果我搜索一个名称,它将在更长的时间之前返回一大堆短文档。
如何对结果进行加权,以便在对相关性进行排名时更多地考虑文档的长度?
如果它有帮助(作为一个cludge)我们在这通常适用的文件上设置了一个标志,所以如果有可能提升所有没有设置此标志的文件,那将是我们的临时选择。
答案 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类
((float) (1.0 / Math.sqrt(numTerms)))
以消除lengthNorm效果。