Solr relevancy & boosting最佳方法



场景是在多个字段值上增强文档:

我有一个字段" Category ",包含值- " News ", " image ", " video ", " audio "。

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

与类别类似,有几个字段,需要根据字段值以相同的方式进行增强。

交货。助推规则可以是,

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

…所以在

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

是的,我认为你的链接是一个合理的想法。这是我们使用的,因为我们想在所有搜索中强制增强,我们不经常改变逻辑,例如在你的情况下:-

<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范围内的任何值映射到target。Min,max,target,value都是常量。如果字段的值(或"值")不在min和max之间,则输出该字段的值。换句话说,如果查询的结果是一个正值(有一个匹配),它将输出boost(1000,900等)。您需要使用boost值,因为它们可能压倒您所拥有的任何其他排名逻辑。你可能会在新闻上获得较差的匹配,而在视频上则有较好的匹配。

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

否则查看bq (boost query)参数

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

实际上生成了下面这样的内容

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

这意味着提升是在你的搜索代码,这是很好的和灵活的。我个人比较喜欢这种工作方式。

相关内容

  • 没有找到相关文章

最新更新