page-translate

Comment créer un moteur de recherche à facette rapide avec Drupal et Apache Solr

Important: Nous venons de migrer d'un site Wordpress vers Drupal alors il se peut qu'il y ait des liens brisés, des images qui ne s'affichent pas ou encore du code mal formatté. Nous travaillons fort pour régler ces problèmes le plus tôt possible.

Crédit: mjdinteractive.com

Quelle est la différence entre un moteur de recherche classique et un moteur de recherche à facette ?

Le premier fonctionne par mot clé tandis que le second fonctionne par filtres : plutôt que de demander à l’utilisateur ce qu’il cherche, on lui présente immédiatement des résultats qu’il peut ensuite rétrécir en utilisant des facettes. La recherche par facettes est donc très efficace dans le cas ou l’utilisateur n’a pas de mot clé pertinent en tête, ou même d’idée précise de ce qu’il cherche comme dans le cas d’une boutique en ligne.

Avec Drupal, il est possible de mettre en place un moteur de recherche à facettes grâce aux différents modules développés par la communauté. Vous aurez besoin de créer des vocabulaires et termes de taxonomies dans la plupart des cas. Voici plusieurs solutions que vous pouvez mettre en place selon votre maîtrise de Drupal.

 

1. Views

Vous pouvez simuler une recherche à facette en utilisant des vocabulaires de taxonomie comme filtres et en les exposant aux visiteurs. Cependant,  on se retrouve souvent avec des pages de résultats vides or l’avantage de la recherche à facette est de toujours retourner des résultats dont on réduit ensuite le nombre par combinaison de facettes.

Cette solution n’est donc pas vraiment une recherche à facette mais peut s’avérer une solution de secours si vous n'avez pas la possibilité d'installer Apache Solr.

 

2. Finder

Le module Finder vous évite d’utiliser le système de taxonomie de Drupal en générant automatiquement les facettes à partir des différentes valeurs utilisées pour un même champs. Cette solution a donc l’avantage de permettre un filtrage sur des champs qui ne sont pas forcément des termes de taxonomies mais elle montre rapidement la limite de la recherche directe dans la base de données Drupal.

Bien qu’il soit possible de charger les facettes en AJAX, le renvoi des résultats reste tout de même lent par rapport à d’autres solutions. Le couple PHP/MySQL n’est en effet pas la technologie la plus efficace pour réaliser un moteur de recherche performant.

Il n’est donc pas conseillé d’utiliser cette solution si la recherche fait partie des fonctionnalités principales du site.

 

3. Apache Solr Search + Facet API

Solr est une application Java basée sur le moteur de recherche Lucene crée par la fondation Apache (plus d’explication ici). Le module Apache Solr Search permet d’intégrer cette technologie à Drupal si vous avez la possibilité d’installer Java 1.6+ et Tomcat ou Jetty.

Cette solution nécessite donc un serveur dédié ou un VPS mais demeure de loin la meilleure. Une recherche sur plusieurs milliers de node se fait extrêmement rapidement et le temps de chargement est le même que pour n’importe quelle autre page.

L’avantage de cette solution réside dans sa rapidité d’exécution et sa facilité de mise en place.

En revanche, il n’est possible de retourner que les données qui sont indexés. Autrement dit, les données retournés par Apache Solr peuvent être incomplète ou différentes de ce qui est stocké dans la base de données Drupal.

En effet, il faut avoir conscience de la différence entre les données stockés dans l’index d’Apache Solr et celles dans la base de données Drupal. Dans cette solution, l’index d’Apache est utilisé pour le calcul de la pertinence des résultats mais aussi pour afficher les résultats.

Il y a donc un risque de désyncronisation entre les données retournées par Solr et le contenu réel des nodes. La solution suivante est une solution à ce problème.

 

4. Search API + Solr Search + Facet API + Views

Cette solution est une alternative à la précédente qui utilise également Apache Solr comme moteur d’indexation et de recherche. Dans cette configuration, Solr retourne seulement les nids des contenus indexés et Drupal récupère l’entité complète pour retourner l’intégralité des nodes.

Le module Search API propose d’indexer ou réindexer automatiquement un contenu lors de sa création ou modification.

L’avantage de cette méthode, en plus de résoudre le problème de désynchronisation des données, est de pouvoir utiliser toutes les capacités du module Views pour personnaliser la page de résultats. La mise en place d’une telle vue est expliquée dans ce tutoriel.

L’inconvénient de cette solution est qu’elle est un peu plus lente que la précédente car Drupal ajoute une étape intermédiaire. La fonction node_load est appelée pour retourner les nodes complets ce qui implique une requête à la base de données.

Il s'agit de la meilleure configuration pour réaliser un moteur de recherche à facette avec Drupal.

Commentaires

Verticrawl a développé un module spécifique, disponible dans les dépôts Drupal ( https://www.drupal.org/node/2454601 ) qui offre une solution de recherche interne/externe pour le site de votre client. Vous disposez ainsi d'une solution d'indexation et de recherche complète, y compris dans les contenus hétérogène (pdf, doc etc) . Ce module est validé par la communauté Drupal et peut être installé sans diffucultés.
Verticrawl est un très bon module référencé sur Drupal.org ici -> https://www.drupal.org/project/verticrawl Néanmoins, son utilisation est revenue payante ! ce qui est bien regrettable ...

Ajouter un commentaire

CAPTCHA
Êtes-vous un robot ?
Image CAPTCHA
Écrivez le code apparaissant dans l'image.

Derniers articles