是否有可能在Solr中提升布尔字段以使它们获得更高的分数?
我们有一个看起来有点像这样的索引:
在搜索时,已被审查的文件(如。is_reviewed = true)应该比尚未加权的权重更重,而不是完全排除它们。
使用is_review:true^100似乎不起作用,它排除了未经评审的项目,而不只是赋予它们更低的权重。如果有不同的方法可以实现这一点呢?谢谢!
发布于 2012-04-11 21:30:02
一些查询解析器具有专门用于此类使用的特性。例如,dismax查询解析器有一个bq,它允许将匹配查询的文档添加到原始查询中。还有一个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查询解析器将任何查询的分数与任何函数相乘。
发布于 2013-01-14 17:16:59
德鲁帕尔
以下是那些使用Drupal的人的解决方案。
首先,在架构浏览器/solr/admin/schema.jsp中找到您的字段名。
然后,根据您使用的模块,尝试以下示例:
Apachesolr模
代码示例:
/**
* 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)'
));
}搜索Solr模块
代码示例:
/**
* 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)';
}https://stackoverflow.com/questions/10113144
复制相似问题