Я использую бэкэнд solr для search_api на сайте drupal 8.
Я добавил значение поля ссылки на термин таксономии ( field_promoted_search
) в индекс.
Если элемент контента имеет field_promoted_search
значение, соответствующее поисковому запросу, я бы хотел, чтобы он получил значительное повышение (например, ^ 1000), подтолкнув его к началу результатов поиска.
Добавление высокого значения «boost» admin/config/search/search-api/index/content/fields
работало, как и ожидалось, когда сервер использовал solr <6, но после перехода на 6.1.0 это не работает должным образом. Это может быть потому , что search_api_solr / солярий использует мультипликативный импульс , а не добавки . Это не кажется мне таким полезным, так как это увеличивает релевантность, достигнутую другими областями, а не исключительно привилегиями 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));
Когда я пытаюсь использовать вместо этого функцию повышения , я получаю сообщение об ошибке от Solr, и запрос не запускается (я пробовал несколько функций).
// Format is: "funcA(arg1,arg2)^1.2 funcB(arg3,arg4)^2.2"
$solarium_query->getEDisMax()->setBoostFunctions("ord(ss_promoted_search,1)^1000");
Любой совет высоко ценится.
Моя ссылка на методы аддитивного и мультипликативного буста - эта очень полезная статья .