web-dev-qa-db-fra.com

Comment faire fonctionner les synonymes de taxonomie avec l'API de recherche?

Les synonymes de balises sont une fonctionnalité importante et populaire dans de nombreux sites (utilisés ici sur StackExchange, par exemple), et les synonymes de taxonomie faisaient partie du Drupal 6 module de taxonomie de base de Drupal, avant étant abandonné en faveur de "Roll your own" systèmes de synonymes personnalisés créés à l'aide de l'API Field .

Lorsque les synonymes fonctionnent de manière fiable, ils sont extrêmement utiles dans la recherche; par exemple, pour vous assurer que les recherches sur "Amérique" trouvent du contenu étiqueté "USA", etc. Cependant, je ne trouve aucune piste sur la méthode standard pour implémenter cette fonctionnalité lorsque vous travaillez avec le populaire Rechercher API - Facet API famille de modules de recherche intégrés associés, pour Node recherches.

"Aller avec le flux" est important lorsque vous travaillez avec des clusters de modules comme celui-ci, pour vous assurer que les systèmes que vous implémentez ne vont pas à l'encontre de la pensée de la communauté et des responsables de modules. Quand ils vont à contre-courant, ils sont floconneux et risquent d'être cassés par les modifications futures de ces modules.

Qu'est-ce qu'une méthode fiable/robuste/standard/attendue pour implémenter des synonymes de taxonomie dans D7 pour les sites utilisant l'API de recherche? (en particulier, avec Search API Solr , mais j'espère que les tentatives de l'API de recherche d'extraire le moteur de recherche particulier fonctionneront dans ce cas).

Si vous avez un système pour cela qui semble fonctionner, mais c'est quelque chose que vous avez compris et vous n'êtes pas sûr qu'il soit ou non à contre-courant (assez courant dans Drupal), veuillez le partager de toute façon avec les informations de votre tests, utilisation et expérience sur les fonctionnalités et modules de la famille API Search API-Facet avec lesquels il fonctionne et ne fonctionne pas bien.

Quelques options plausibles mais potentiellement floconneuses que j'ai trouvées dans la recherche:

  • Il y a un module D7 Search Synonymes , mais il semble peu utilisé, et il y a pas de confirmation cela fonctionne ou continuera de fonctionner avec des modules de recherche tiers comme l'API de recherche (c'est conçu avec Drupal recherche de base à l'esprit). Edit: ne semble pas non plus être trop fiable en D7 en général .
  • Il est théoriquement possible d'ajouter un champ de référence de terme appelé "Synonymes" à un vocabulaire de taxonomie, et d'indexer ce champ à partir du terme dans l'API de recherche avec un poids égal au terme sur le nœud lui-même. Cela fonctionnerait pour les recherches de texte, mais ressemble à une solution de ruban adhésif MacGuyver-y peu profond plutôt qu'à quelque chose de robuste qui s'intègre facilement à toute la famille de l'API de recherche. Par exemple, si un terme "Royaume-Uni" a un synonyme "Grande-Bretagne", quelqu'un recherchant sur "Grande-Bretagne" obtiendrait des résultats balisés avec United Kindgom, mais quelqu'un tapant "Grande-Bretagne" dans un filtre exposé de taxonomie à saisie semi-automatique ou sélectionnant la Grande-Bretagne avec un fait de taxonomie ne verrait aucun contenu marqué avec "Royaume-Uni". *****
  • Une autre possibilité similaire consiste à ajouter un champ de texte brut à plusieurs valeurs "Synonymes" au vocabulaire du terme (ou même séparé par des virgules, je suppose), et à l'indexer avec le même poids que le nom du terme comme ci-dessus. Mais cela a des problèmes similaires, sinon pires, à ceux ci-dessus dans l'exemple ci-dessus, "la Grande-Bretagne" ne serait même pas répertoriée comme une option dans une facette ou un filtre exposé. Il pourrait y avoir un moyen de créer un champ composite en combinant le nom et les synonymes ("Royaume-Uni (Grande-Bretagne, Royaume-Uni)"), et de définir des facettes/filtres exposés/etc. pour l'utiliser ... mais je ne peux penser à aucun moyen pour faire cela qui n'est pas inquiétant et qui ne se sent pas inquiétant contre le grain. Edit: Search API Combined semble conçu pour quelque chose comme ça, mais je ne sais pas à quel point il est testé ou intégré dans la famille des API de recherche.
  • Ensuite, il y a l'option de dernier recours de tout entasser dans le nom du terme: il devrait être clair que ce n'est pas souhaitable et rendrait dans de nombreux cas des listes très laides (par exemple, imaginez une liste de navigation de pays qui ont été écrits comme "Nord" Corée (PRK, RPDC, République populaire démocratique de Corée) "...). Ou avoir un champ "Nom d'affichage" qui montre la version courte et tout paramétrer sauf la recherche (toutes les vues, Pathauto, tous les autres modules contrib/core qui utilisent le nom du terme) pour l'utiliser à la place du nom du terme ... encore une fois, très hacky et très à contre-courant.
  • Apache Solr a une fonction Synonymes, où un fichier texte de synonymes est lu et ces termes sont traités comme synonymes dans les recherches qui l'utilisent. Cependant, bien que cela soit possible dans une configuration d'API de recherche qui utilise Solr, ceci est considéré par les responsables du module comme n'étant pas pris en charge la configuration avancée de Solr "tentative à ses risques" . En outre, il est plus approprié pour la synonymie générique dans le langue du site que la synonymie spécifiquement dans le contexte d'une taxonomie. Par exemple, un site avec une taxonomie qui ne discrimine pas l'Angleterre, l'Écosse, etc. de la Grande-Bretagne pourrait vouloir les considérer comme synonymes dans le contexte du balisage, mais pas dans le contexte des recherches sur le corps du texte. Edit: Le responsable principal de l'API Facet met en garde contre cette route car les modules d'intégration Solr fonctionnent avec des termes comme des TID et non du texte.

Je sais que c'est un exemple erroné car dans le cas du Royaume-Uni/Grande-Bretagne et des pays en général, les gens ont l'habitude d'utiliser des listes qui n'ont que l'un ou l'autre. Il existe de nombreux cas moins simples (par exemple, des catégories de produits) où les gens ne penseraient pas à chercher un synonyme.

Mise à jour: Informations pertinentes dans n nouveau fil sur la file d'attente de l'API Facet Drupal.org . Également un (actuellement sans réponse) fil sur la file d'attente de l'API de recherche .

(tout avocat des règles se demandant s'il est acceptable qu'il y ait des demandes d'assistance drupal.org et drupal répond aux questions sur le même sujet: oui, en fait, il est encouragé à prendre les mainteneurs du module de décompression )

20

J'utilise l'excellent bojanz module Synonymes . Il s'agit d'une réécriture complète de la fonction de synonymes D6, avec un certain nombre de nouvelles cloches et sifflets. On dirait qu'il pourrait faire la plupart de ce dont vous avez besoin.

2
Triskelion