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 .

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.