拉动了Solr的布尔字段(Boosting boolean fields in Solr)

2019-07-28 22:30发布

是否有可能提振Solr的布尔字段,以便他们获得更高的分数?

我们已经有了这看起来有点像这样的指标:

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

在搜索时,已审查的文件(即is_reviewed =真)应该比那些都没有,而不是完全排除他们更大的权重。

使用is_review:true^100似乎并没有工作,排除了未经审核的项目,而不是仅仅给他们一个较低的权重。 如果有不同的方法可以做到这一点? 谢谢!

Answer 1:

有些查询分析器有一个专门的这种用法的功能。 例如,dismax查询分析器具有升压查询bq它允许你以提高匹配将其条款对原始查询的查询哪些文件。 还有一个升压功能bf ,它允许您通过一个函数的结果乘以分数。 例如,使用is_review因为这bf参数,

  • 比分其每一份文件的is_review字段未定义将由0相乘。
  • 每一个文档,这样的成绩is_review = false将由一个相乘。
  • 每documentso的得分is_review = true将乘以2。

is_review:true^100不应该,除非你使用排除非审查项目AND为默认查询操作 。 在这种情况下,你可以尝试更换is_review:true^100(is_review:true^100 OR is_review:false^0)

如果你有兴趣在dismax查询分析器的增强功能,但想坚持到默认的查询分析器,您可以使用升压查询分析器 ,这将让你与任何函数乘以任何查询的分数。



Answer 2:

Drupal的

这里是为那些使用Drupal的CMS是谁的解决方案。

首先,在/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的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)';
}


文章来源: Boosting boolean fields in Solr
标签: sorting solr