繁体   English   中英

在Solr中提升布尔字段

[英]Boosting boolean fields in Solr

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

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

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

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

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

某些查询解析器具有专用于此类用法的功能。 例如,dismax查询解析器有一个提升查询bq ,它允许您通过将其子句添加到原始查询来提升与查询匹配的文档。 还有一个增强函数bf ,它允许您将分数乘以函数的结果。 例如,使用is_review作为此bf参数,

  • is_review字段未定义的每个文档的is_review将乘以0。
  • 每个文档的得分,以便is_review = false将乘以1。
  • 每个文件的分数,即is_review = true将乘以2。

is_review:true^100不应排除未审核的项目,除非您使用AND作为默认查询运算符 在这种情况下,您可以尝试替换is_review:true^100 by (is_review:true^100 OR is_review:false^0)

如果您对dismax查询解析器的boost功能感兴趣但想要坚持使用默认查询解析器,则可以使用boost查询解析器 ,它允许您将任何查询的得分乘以任何函数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM