【问题标题】:Boosting the coordination factor in a Solr query提高 Solr 查询中的协调因子
【发布时间】:2014-02-11 16:04:01
【问题描述】:

我对特定于我的集合域的默认 Solr 评分算法有疑问。在我的领域中,包含所有查询词或大多数查询词的文档比仅包含几个词的文档更相关。我想提高文档的分数,以便匹配的词越多,分数就越高。我知道 solr 已经通过将分数乘以协调因子来提升此类文档的效果。但是,协调因素对我来说不够重要,我希望将其提高到一定的力量。我也熟悉 ExtendedDismax 解析器的 Minimum-Should-Match 功能,但该功能并不能解决我的问题,因为我不想消除与足够术语不匹配的文档,我只想“惩罚”他们。

有没有办法增加协调因素的重要性?如果他们解决了问题,我也会接受其他不使用任何协调因素的解决方案。

【问题讨论】:

    标签: solr lucene


    【解决方案1】:

    只写你自己的相似性可能是最简单的。你可以用任何你喜欢的东西覆盖coord method,它的实现非常简单,真的就像:

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

    您可以引入自己的相似性实现in the schema

    <similarity class="this.is.MySimilarity"/>
    

    【讨论】:

    • 谢谢,我接受您的回答,因为它解决了我所说的问题。该解决方案的问题在于不能将协调因子的提升功率作为参数提供给查询。在描述问题时我并不清楚这一点,但我每次都必须以不同的方式提高协调因素。是否有可能以允许我这样做的方式实现它?我正在考虑一个提升函数查询,但我不知道如何以这种方式访问​​ coord 参数。
    • 恐怕不知道这样的事情。想到的唯一解决方案是:A-复制字段,并使用SchemaSimilarityFactory 将自定义相似性应用于一个,并将默认相似性应用于另一个,并查询正确的字段,B-直接访问IndexSearcher,您可以在运行查询之前访问相似度(类似于indexSearcher.getSimilarity().setCoordBoostFactor(2); indexSearcher.search(query);),C-后处理,这可能是唯一可行的如果您可以指望文档相对较短,并且查询相对简单。
    猜你喜欢
    • 2012-03-21
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2012-05-18
    • 2016-02-18
    • 1970-01-01
    • 2013-05-02
    相关资源
    最近更新 更多