使用search_api_solr,如何在使用solr 6.x时应用基于字段的有效增强?


7

我在drupal 8网站上将solr后端用于search_api

我已将分类术语参考字段()的添加field_promoted_search到索引中。

如果一项内容的field_promoted_search价值与搜索字词匹配,我希望它得到很大的提升(例如^ 1000),将其推到搜索结果的顶部。

admin/config/search/search-api/index/content/fields在服务器使用solr <6时,按预期的方式添加高的“提升”值,但是由于移至6.1.0,因此无法按预期的方式工作。这可能是因为search_api_solr / solarium使用的是乘法提升而不是加法运算。这对我来说似乎没有用,因为这使其他领域获得的相关性成倍增加,而不是仅仅特权field_promoted_search,尽管我不确定这方面。

我尝试使用将增强的查询为此提升的搜索字段添加到日光浴室查询中hook_search_api_solr_query_alter。这要求我将每个搜索关键字作为增强查询进行传递,并且效果似乎受到关键字顺序的影响(而且我的结果并没有获得最高排名)。

$keys = $query->getKeys();
unset($keys['#conjunction']);
// Boost results where search term matches promoted search field.
$boost_keys = [];
$boost_value = 1000;
foreach ($keys as $key) {
  $boost_keys[] = '"' . $key . '"^' . $boost_value;
}
$solarium_query->getEDisMax()->setBoostQuery('ss_promoted_search:' . implode(' OR ', $boost_keys));

当我尝试使用boost 函数时,我从Solr处收到一个错误,查询未运行(我尝试了几个函数)。

// Format is: "funcA(arg1,arg2)^1.2 funcB(arg3,arg4)^2.2"
$solarium_query->getEDisMax()->setBoostFunctions("ord(ss_promoted_search,1)^1000");

任何建议,不胜感激。


我对加性与乘性增强方法的参考是这篇非常有帮助的文章

Answers:


-2

Search API和Search API Solr Drupal提供的API函数均无法正常工作。您可以检查solarium文档,也可以切换回Solr 5或Solr4。Boosts可以与Solr 5.x一起正常工作。索引的数据类型也很重要。尝试将其索引为全文字段。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.