我在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");
任何建议,不胜感激。
我对加性与乘性增强方法的参考是这篇非常有帮助的文章。