在Solr中提升布尔字段

时间:2012-04-11 20:07:51

标签: sorting solr

是否可以在Solr中增加布尔字段以便获得更高的分数?

我们有一个看起来有点像这样的索引:

  • DOCUMENT_ID
  • 标题
  • 描述
  • 关键字
  • is_reviewed

搜索时,经过审核的文件(即is_reviewed = true)的权重应该大于没有审核的文件,而不是完全排除它们。

使用is_review:true^100似乎不起作用,并且不包括未审核的项目,而不是仅仅给予它们较低的权重。如果有不同的方法可以实现吗?谢谢!

2 个答案:

答案 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

以下是那些使用Drupal CMS的解决方案。

首先,在/solr/admin/schema.jsp中的Schema Browser中找到您的字段名称

然后,根据您使用的模块,尝试以下示例:

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 API模块

代码示例:

/**
 * 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)';
}