[英]Boosting boolean fields in Solr
是否有可能在Solr中增加布尔字段,以便获得更高的分数?
我们有一个看起来有点像这样的索引:
在搜索时,已经审核过的文档(即is_reviewed = true)的权重应该大于那些没有审核的文档,而不是完全排除它们。
使用is_review:true^100
似乎不起作用,并且排除未查看的项目而不是仅仅给予它们较低的权重。 如果有不同的方法可以实现吗? 谢谢!
某些查询解析器具有专用于此类用法的功能。 例如,dismax查询解析器有一个提升查询bq
,它允许您通过将其子句添加到原始查询来提升与查询匹配的文档。 还有一个增强函数bf
,它允许您将分数乘以函数的结果。 例如,使用is_review
作为此bf
参数,
is_review
字段未定义的每个文档的is_review
将乘以0。 is_review
= false
将乘以1。 is_review
= true
将乘以2。 is_review:true^100
不应排除未审核的项目,除非您使用AND
作为默认查询运算符 。 在这种情况下,您可以尝试替换is_review:true^100
by (is_review:true^100 OR is_review:false^0)
。
如果您对dismax查询解析器的boost功能感兴趣但想要坚持使用默认查询解析器,则可以使用boost查询解析器 ,它允许您将任何查询的得分乘以任何函数。
以下是那些使用Drupal CMS的解决方案。
首先,在/solr/admin/schema.jsp中的Schema Browser中找到您的字段名称
然后,根据您使用的模块,尝试以下示例:
代码示例:
/**
* Implements hook_apachesolr_query_alter().
*/
function hook_apachesolr_query_alter(DrupalSolrQueryInterface $query) {
$query->addParam('bq', array('is_review' =>
'(is_review:true^100 OR is_review:false^0)'
));
}
代码示例:
/**
* Implements hook_search_api_solr_query_alter().
*/
function hook_search_api_solr_query_alter(&$call_args, SearchApiQueryInterface $query) {
$call_args['params']['bq'][] = '(is_review:true^100 OR is_review:false^0)';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.