是否可以在 Solr 中提升布尔字段以使其获得更高的分数?
我们有一个看起来有点像这样的索引:
- 文档 ID
- 标题
- 描述
- 关键词
- is_reviewed
搜索时,已审核的文档(即 is_reviewed = true)的权重应高于未审核的文档,而不是完全排除它们。
使用is_review:true^100
似乎不起作用,并排除未审查的项目,而不是仅仅给它们较低的权重。如果有不同的方法可以实现?谢谢!
一些查询解析器具有专门用于这种用途的功能。例如,dismax 查询解析器有一个boost 查询bq
,它允许您通过将其子句添加到原始查询来提升与查询匹配的文档。还有一个boost 函数bf
,它允许您将分数乘以函数的结果。例如,is_review
作为这个bf
参数使用,
is_review
将乘以 0。is_review
=false
将乘以 1。is_review
=true
将乘以 2。is_review:true^100
AND
除非您用作默认查询运算符,否则不应排除未审查的项目。在这种情况下,您可以尝试替换is_review:true^100
为(is_review:true^100 OR is_review:false^0)
.
如果您对 dismax 查询解析器的 boost 功能感兴趣,但想坚持使用默认查询解析器,您可以使用boost 查询解析器,它允许您将任何查询的分数与任何函数相乘。
这是使用 Drupal CMS 的人的解决方案。
首先,在模式浏览器中的 /solr/admin/schema.jsp 中找到您的字段名称
然后,根据您使用的模块,尝试以下示例:
代码示例:
/**
* 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)';
}