Avec search_api_solr, comment puis-je appliquer un boost basé sur le champ lors de l'utilisation de solr 6.x?

7

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_searchune 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/fieldsfonctionné 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 .

autopoïétique
la source

Réponses:

-2

Aucune des fonctions API fournies par Search API et Search API Solr Drupal ne fonctionne correctement. Vous pouvez soit vérifier la documentation du solarium, soit revenir à Solr 5 ou Solr 4. Les boost fonctionnent correctement avec Solr 5.x. Le type de données indexé est également important. Essayez de l'indexer en tant que champ Fulltext.

Gaurav Kapoor
la source