Moteurs de recherche

Le prix Pulitzer, Drupal et la recherche par facette

Le prix Pulitzer, particulièrement reconnu dans le domaine du journalisme, s'est tout récemment doté d'un nouveau site Web basé sur Drupal. Depuis sa création en 1904, le prix a engendré une riche base de données, dont l'exploration est désormais facilitée par la recherche par facette, via le module Faceted Search pour Drupal. On peut combiner différents critères de recherche tels l'année, la catégorie du prix, le genre de nomination et, bien sûr, des mots clés.

Ceci n'est pas sans rappeler le classique site de démonstration du système Flamenco qui, dans le même esprit, exploite les données du prix Nobel. Cet exemple, conçu par des pionniers de la recherche par facette, m'avait grandement inspiré le développement de Faceted Search.

Sans parler des incontournables modules CCK et Views, plusieurs autres modules pour Drupal ont aussi été employés sur le site du prix Pulitzer. Dans un article intéressant (en anglais), les créateurs du site, OpenFlows, en identifient quelques-uns et décrivent leur approche dans le développement du projet.

En direct du Minnesota

North Star Blankets

Ces jours-ci, la mention «live from the Minnesota Search Sprint» (en direct du sprint de recherche du Minnesota) apparaît régulièrement en en-tête des soumissions de modifications apportées au moteur de recherche de Drupal.

En effet, tel que je l'avais annoncé récemment, une petite équipe de programmeurs (Earnest Berry, Robert Douglass, Chad Fennell, Doug Green, Djun Kim, Blake Lucchesi et moi-même) se trouve maintenant en plein «sprint» de programmation pour enrichir le module search de Drupal. Notre centre d'opérations se trouve sur l'immense campus de l'Université du Minnesota à Minneapolis, où Chad Fennell a gentiment pris soin de la logistique.

Notre principal défi consiste à atteindre un bon équilibre entre les réalisations concrètes et la vision globale du projet. Établir une feuille de route pour l'avenir est important, mais dans l'univers du logiciel libre, la seule chose vraie c'est le code! Les plans à long terme sont particulièrement difficiles à tenir dans cet univers, puisque Drupal évolue avec les disponibilités des contributeurs et les priorités des projets qui financent leur travail. La vélocité même du développement de Drupal en fait une cible particulièrement mouvante.

Par conséquent, ces deux derniers jours nous avons alterné entre la réalisation de tâches simples (pour les résultats concrets) et les remue-méninges (pour les enjeux de plus grande envergure), avec un souci d'aligner même les tâches mineures sur les objectifs plus importants, histoire d'aller dans la bonne direction, petit pas par petit pas. Il s'agit d'un réel puzzle; des pièces insignifiantes en elles-mêmes prendront, une fois accolées aux autres, tout leur sens.

Quelques pistes...

Voici quelques-unes des pistes que nous explorons dans ce sprint :

  • Unification du processus d'analyse lexicale appliqué à l'indexage et lors de la recherche.
  • Analyse lexicale au moyen d'une chaîne de traitements personnalisable, basée sur la même architecture que les filtres d'entrée de Drupal.
  • Varier l'analyse lexicale en fonction de paramètres tels la langue ou le format du contenu. Par exemple, des algorithmes de lexémisation distincts s'appliqueraient en fonction de la langue.
  • Calcul de classement des résultats extensible. Hormis les facteurs de base déjà prévus pour établir le classement des résultats, de nouveaux facteurs pourront être programmés dans des modules tiers et activés à la demande par l'administrateur d'un site. Par exemple, un site de commerce électronique pourrait rehausser le classement d'un produit en fonction de son volume de ventes.
  • Possibilité d'activer ou de désactiver différents modules de recherche séparément. Dans Drupal 5 et 6, activer le module search active toutes les fonctions de recherche, sur les noeuds et les utilisateurs, même si toutes ne sont pas pertinentes au site.
  • Abstraire la représentation des résultats pour éventuellement permettre la construction de facettes à partir d'un ensemble arbitraire de noeuds, qu'ils proviennent, par exemple, d'une recherche ou d'une vue.
  • Utiliser un objet plus «intelligent» qu'une chaîne de caractères pour représenter la requête, tout au long du processus de recherche. Cet objet pourrait être construit via une interface de programmation (accessible à n'importe quel module) ou via une chaîne de caractères. Il pourrait également produire la chaîne de caractères qui lui correspond en sortie, pour génération d'hyperliens. Présentement, les modules Faceted Search et ApacheSolr ont tous deux des éléments qui s'approchent de ceci. Ultimement, si cet objet pouvait représenter une requête du module Views, un grand pas serait accompli pour que des facettes puissent se rattacher directement à une vue...
  • Scinder la logique d'indexation de la logique de recherche. Les fonctions de recherche de base sont un fardeau inutile pour les site utilisant Faceted Search ou les filtres de recherche de Views 2 — ces modules utilisent l'index de base, mais implémentent leur propre logique de recherche.
  • Unifier la recherche d'éléments hétérogènes dans une seule page de résultats. Ceci pourrait rendre particulièrement utile l'éventuelle indexation d'éléments comme les blocs, les vues (du module Views) et les panneaux (du module Panels).
  • Indexer des données qui sont présentement omises de l'index afin d'augmenter la pertinence des résultats : Chemin (URL) du contenu, nom de l'élément de menu associé au contenu, etc.
  • Abstraire le système d'indexation des contenus afin de pouvoir lui substituer l'indexation par un moteur externe, par exemple Solr ou Sphinx.

Participer, en savoir plus...

Que vous soyez sur place ou non, il est facile de participer à ces travaux ou de les suivre de plus près! Il suffit d'examiner les propositions, les réviser, les tester, les commenter!

Demain sera, déjà, la dernière journée du sprint. En plus de poursuivre certaines des pistes présentées ci-haut, nous comptons examiner les questions de performance d'exécution. À suivre!

Doter Drupal d'un moteur de recherche plus performant

Drupal possède un excellent moteur de recherche par mots-clés, le module search qui est fourni à la base avec Drupal. On peut employer plusieurs opérateurs de recherche, l'intersection de mots-clés (ET), l'union (OU), la négation (NON) de même que la recherche de phrases complètes. L'algorithme de classement tiens compte de plusieurs facteurs tels la fréquence du mot, son balisage HTML, la popularité et la date de publication du contenu. En étant détaché de la mise à jour des contenus via la commande cron, le processus d'indexation ne nuit pas au fonctionnement rapide du site. Par-dessus tout, le moteur est très facile à utiliser puisqu'il suffit de deux clics pour activer le module!

Par conséquent, le module search sert les besoins de milliers de sites. Cette popularité extrême en fait aussi un module fréquemment critiqué. On voudrait plus facilement personnaliser l'interface de recherche et les pages de résultats, accroître la vitesse sur les sites très lourdement chargés de contenus, brancher d'autres algorithmes de calcul du classement, rechercher des mots partiels, rechercher du texte dans des champs spécifiques, rechercher des plages de valeurs, se faire suggérer des termes similaires, rechercher dans les fichiers joints, etc. Bâtir un moteur de recherche qui répond à toutes les demandes n'est pas une mince affaire!

Plusieurs modules additionnels visent à répondre à certaines de ces demandes, notamment Faceted Search (je dois le mentionner :)), Views Fast Search, Apache Solr, Fuzzy Search et Swish-E.

À chaque nouvelle version de Drupal, le module search connaît son lot d'améliorations. Dans Drupal 6, les améliorations ont surtout concerné la vitesse d'exécution des requêtes de recherche. Pour le futur Drupal 7, la course aux améliorations est lancée et, à l'occasion d'un sprint inédit qui aura lieu du 9 au 11 mai prochain à l'Université du Minnesota, atteindra une vitesse folle! En effet, c'est à cette date que sera tenu le Search Sprint, une rencontre de plusieurs développeurs chevronnés impliqués dans le développement de Drupal et d'outils de recherche. J'aurai la chance d'y prendre part moi-même, avec l'appui du Laboratoire NT2 de l'UQAM — qui utilise mon moteur de recherche à facette dans de nombreux projets et qui souhaite poursuivre le développement d'outils de recherche avancés pour Drupal — et de Acquia. Les autres participants ayant confirmé leur présence jusqu'à présent : Earnest Berry, Robert Douglass, Chad Fennell, Doug Green, Michael Hess, Djun Kim, Blake Lucchesi.

Lors de la dernière conférence Drupalcon à Boston, j'ai pu constater à quel point réunir au même endroit des développeurs intéressés pouvait créer des synergies et orienter les efforts autour de directions communes. Semblable au Search Sprint, un sprint s'est tenu à Paris et vient de se terminer avec la mise en place d'un système de tests unitaires automatisés pour Drupal, un gain énorme qui permettra d'accélérer le développement de la plateforme sans risquer d'en compromettre la qualité. Bref, ce genre d'évènement a fait ses preuves et, malgré la nature décentralisée et géographiquement dispersée à laquelle nous sommes habitués dans l'univers Drupal, tout le monde s'entend sur les bénéfices de ces sprints!

Nous ne règlerons pas tous les enjeux de la recherche sous Drupal lors d'un sprint de 3 jours, mais on pourra s'attendre à des résultats plus qu'intéressants.

Classification et recherches par facettes avec Drupal

Après la rencontre Drupal, c'est également vendredi dernier que, sans tambour ni trompette, j'ai livré une première ébauche d'un module sur lequel je planchais — lorsque le temps le permettait — depuis un bon moment déjà: Faceted Search.

Ce module permet d'effectuer des recherches par facettes. Les contenus sont classés dans des hiérarchies de catégories, puis l'interface de recherche permet de naviguer dans le contenu en creusant à partir de catégories générales vers de plus précises. Dans ce type de classification, les facettes sont idéalement représentées sous formes de taxonomies mutuellement exclusives, si bien que, en combinant les termes de plusieurs facettes, on peut isoler rapidement un sous-ensemble de contenus qui nous intéresse. Ceci est nettement plus flexible qu'une hiérarchie unique de termes qui, certainement, ne saura répondre aux attentes de tous les utilisateurs et qui ne reflétera pas toujours leurs intuitions quant à l'organisation du contenu. Par exemple, dans un système de classification de restaurants par facettes, un utilisateur peut lancer sa recherche suivant le prix, puis l'affiner par localisation et par type de cuisine, tandis qu'un autre peut d'abord choisir un type de cuisine, puis restreindre les résultats selon le nombre d'étoiles accordées à l'établissement (exemple tiré de Wikipédia).

Drupal, via son module de taxonomie, dispose depuis longtemps d'outils très puissants pour classer les contenus mais, à mon point de vue, ne proposait aucune interface pleinement satisfaisante pour naviguer dans le contenu via la classification, particulièrement pour des sites à contenu très étoffé et varié. C'est le problème auquel je me suis attaqué avec Faceted Search, une interface de recherche intégrant pleinement le système de recherche par mots-clés de Drupal à la navigation par facettes.

Ma plus grande source d'inspiration pour ce projet fut certainement Flamenco, une superbe interface de recherche développée par une équipe de l'Université de Californie à Berkeley. Combiner la puissance de cette interface à la richesse d'un gestionnaire de contenu comme Drupal constitue, pour moi, une sorte de Saint Graal!

À ce stade-ci, le système Flamenco est plus complet et mature que Faceted Search. Cependant, Faceted Search tire pleinement parti de son intégration dans Drupal: Son interface de programmation permet de créer facilement de nouveaux types de facettes, ouvrant d'immenses possibilités au-delà de la simple taxonomie. Un site de commerce électronique pourrait, par exemple, fournir des facettes selon le prix des produits; un journal pourrait utiliser les noms d'auteurs, dates de publications d'articles, nombre de commentaires des visiteurs; un site utilisant CCK pourrait offrir les valeurs de certains champs dans des facettes, etc. Pour l'instant, je n'ai introduit que deux types de facettes, soient celles basées sur la taxonomie et le type de contenu, mais tout programmeur intéressé pourra en implémenter de nouveaux.

Notez que la classification par facettes ne se prête pas à toutes les sauces. Généralement, on souhaitera un classement basé sur des catégories élaborées avec soin (vocabulaires contrôlés), ce qui est difficile à réaliser dans le contexte de communautés en ligne où le classement est décentralisé (folksonomie). Avant de plonger, il pourrait vous être utile de consulter quelques conseils quant à la classification par facettes (en anglais).

Explora Images

Explora Images

Explora Images est une photothèque en ligne pour laquelle j'ai développé notamment un moteur de recherche exclusif alliant furetage et recherche par mots-clés, ainsi que des outils de manipulation d'images, un panier virtuel, un système permettant d'établir des devis, un calculateur de prix et un système de commande et de suivi des commandes.

La technologie sous-jacente est une version légèrement modifiée de Drupal, les composants que j'ai développés s'y intégrant harmonieusement sous forme de modules. L'envergure du projet m'a permis d'acquérir une connaissance approfondie de Drupal.

J'ai également conçu l'interface du site, qui représentait un certain défi afin que le système de recherche reste convivial malgré son fonctionnement novateur. Le développement de ce moteur de recherche m'a plus tard conduit à créer le projet Faceted Search.

Le logo Explora Images est une création de Geneviève Lesieur, designer graphique.

Inauguré en décembre 2005.

RSS feed