提高Solr查询中的协调因子

3
我在默认Solr评分算法中遇到了问题,这与我的收集领域有关。在我的领域中,包含所有查询词或大多数查询词的文档比仅包含少量词语的文档更相关。我希望提高文档的得分,使匹配的词越多,得分越高。我知道solr已经通过乘以协调因子来提高此类文档的权重。然而,协调因子对我来说不够显著,我希望将其提高到一定的程度。我还熟悉ExtendedDismax解析器的Minimum-Should-Match功能,但该功能无法解决我的问题,因为我不想消除未匹配足够词语的文档,我只想“惩罚”它们。

是否有一种方法可以增加协调因子的重要性?如果能解决问题,我也会接受其他不使用协调因子的解决方案。

1个回答

1

最简单的方法可能是编写自己的相似度计算函数。您可以使用任何您喜欢的坐标方法覆盖它,而且实现起来非常简单。例如:

public class MySimilarity extends DefaultSimilarity {
    @Override
    public float coord(int overlap, int maxOverlap) {
        return super.coord(overlap, maxOverlap)^2;
    }
}

你可以在模式中 导入自己的相似性实现
<similarity class="this.is.MySimilarity"/>

谢谢,我接受你的答案,因为它解决了我所述的问题。这个解决方案的问题在于不能将协调因子的幂作为查询的参数给出。当我描述问题时,我没有清楚说明这一点,但我每次都需要以不同的方式增强协调因子。有没有可能以允许我这样做的方式来实现它?我考虑过使用增强函数查询,但我不知道如何以那种方式访问coord参数。 - snakile
很抱歉,我不知道有类似的解决方案。我能想到的唯一解决方案是:A-复制该字段,并使用SchemaSimilarityFactory将自定义相似性应用于一个字段,将默认相似性应用于另一个字段,并查询正确的字段,B-直接访问IndexSearcher,在运行查询之前可以访问相似性(类似于indexSearcher.getSimilarity().setCoordBoostFactor(2); indexSearcher.search(query);),C-后处理,这可能只适用于文档相对较短且查询相对简单的情况。 - femtoRgon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接