【问题标题】:Solr relevancy & boosting best approachSolr 相关性和提升最佳方法
【发布时间】:2016-12-14 07:47:31
【问题描述】:

场景是在多个字段值上提升文档:

我有一个字段“Category”包含值 - “News”、“image”、“video”、“audio”。

现在基于上面提到的字段值,我想给它们一些提升(优先级),例如“News”获得最高优先级,其次是“video”,而不是“audio "等等。

与类别类似,还有几个字段,需要根据字段值以相同的方式提升。

例如。提升规则可以是,

Category=  News^1000
Category=  Image^900
Premium_Contents = True^200
Sponsored = True^300

...等等

所以我遇到了一个解决方案Reference。我正在尝试找出计算搜索相关性结果集的最佳方法。

【问题讨论】:

    标签: search solr full-text-search relevance solr-boost


    【解决方案1】:

    是的,我认为您的链接是一个合理的想法。这是我们使用的,因为我们要强制执行所有搜索的提升,并且我们不会经常更改逻辑,例如在您的情况下:-

    <requestHandler name="/select" class="solr.SearchHandler">
        <lst name="defaults">
            <str name="defType">edismax</str>
            <str name="boost">product(
                        map(query($type1query),0,0,1,$type1boost),
                        map(query($type2query),0,0,1,$type2boost))</str>
                <str name="type1query">Category:"News"</str>
                <double name="type1boost">1000.0</double>
                <str name="type2query">Category:"Image"</str>
                <double name="type2boost">900.0</double>
        </lst>
    </requestHandler>
    

    在这种情况下,查询函数返回特定查询的分数。这是在类别中寻找新闻、图像等的匹配项。

    map 函数具有以下签名:map(x,min,max,target,value) 将函数 x 的任何在 min 和 max 范围内的值映射到目标。 min,max,target,value 是常量。如果它不在最小值和最大值之间,它会输出字段的值(或“值”)。换句话说,如果查询的结果是正值(有匹配),它将输出提升(1000,900 等)。您需要使用提升值,因为它们可以压倒您拥有的任何其他排名逻辑。例如,您可能会在新闻排名上获得较差的匹配,而在视频上的匹配更好。

    您可以使用这些提升创建单独的请求处理程序,以便您可以绕过它们进行其他搜索。显然,如果您进行任何更改,您必须更改 solrconfig 并重新启动 Solr,这可能是一个问题。

    否则看bq(提升查询)参数。

    bq=Category:News^1000.0+Category:Image^900...
    

    实际上在幕后产生了类似的东西

    boost(+*:* (Category:News^1000 + Category:Image^900))
    

    这意味着提升是在您的搜索代码中完成的,既美观又灵活。我个人更喜欢这种工作方式。

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 2011-02-28
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      相关资源
      最近更新 更多