J'utilise le backend solr pour search_api sur un site drupal 8.
J'ai ajouté la valeur d'un champ de référence de terme de taxonomie ( field_promoted_search
) à l'index.
Si un élément de contenu a field_promoted_search
une valeur correspondant au terme de recherche, j'aimerais qu'il soit considérablement amélioré (par exemple ^ 1000), en le poussant en haut des résultats de recherche.
L'ajout d'une valeur de «boost» élevée a admin/config/search/search-api/index/content/fields
fonctionné comme prévu lorsque le serveur utilisait solr <6, mais depuis le passage à 6.1.0, cela ne fonctionne pas comme prévu. Cela peut être dû au fait que search_api_solr / solarium utilise un boost multiplicateur plutôt qu'un additif . Cela ne me semble pas aussi utile que cela multiplie la pertinence atteinte par d'autres domaines, plutôt que de privilégier uniquement field_promoted_search
, bien que je ne sois pas certain de cet aspect.
J'ai essayé d'ajouter une requête boost pour ce champ de recherche promu à la requête solarium à l'aide de hook_search_api_solr_query_alter
. Cela m'oblige à passer chaque clé de recherche comme une requête boostée, et l'effet semble être affecté par l'ordre des clés (et mon résultat ne finit pas non plus).
$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));
Lorsque j'essaie d'utiliser une fonction boost à la place, j'obtiens une erreur de retour de Solr et la requête ne s'exécute pas (j'ai essayé plusieurs fonctions).
// Format is: "funcA(arg1,arg2)^1.2 funcB(arg3,arg4)^2.2"
$solarium_query->getEDisMax()->setBoostFunctions("ord(ss_promoted_search,1)^1000");
Tout conseil très apprécié.
Ma référence pour les méthodes de boost additif vs multiplicatif est cet article très utile .