是否可以在Solr中增加布尔字段以便获得更高的分数?
我们有一个看起来有点像这样的索引:
搜索时,经过审核的文件(即is_reviewed = true)的权重应该大于没有审核的文件,而不是完全排除它们。
使用is_review:true^100
似乎不起作用,并且不包括未审核的项目,而不是仅仅给予它们较低的权重。如果有不同的方法可以实现吗?谢谢!
答案 0 :(得分:9)
某些查询解析器具有专用于此类用法的功能。例如,dismax查询解析器有一个boost query bq
,它允许您通过将其子句添加到原始查询来提升与查询匹配的文档。还有一个boost function bf
,它允许您将分数乘以函数的结果。例如,使用is_review
作为此bf
参数,
is_review
字段未定义的每个文档的分数将乘以0. is_review
= false
乘以1。is_review
= true
将乘以2。is_review:true^100
作为default query operator,否则 AND
不应排除未审核的商品。在这种情况下,您可以尝试将is_review:true^100
替换为(is_review:true^100 OR is_review:false^0)
。
如果您对dismax查询解析器的boost功能感兴趣但想坚持使用默认查询解析器,则可以使用boost query parser,这样您就可以将任何查询的得分乘以任何函数
答案 1 :(得分:4)
以下是那些使用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)';
}