Haystack, la recherche avec Django

haystack

Les fonctionnalités de recherche sont indispensables pour tout site qui dépasse quelques pages. L’habitude de taper l’objet de notre curiosité dans le champ d’un moteur de recherche a profondément modifié nos habitudes de navigation, et il est souvent plus rapide et intuitif d’utilser la recherche embarquée d’un site que de naviguer laborieusement dans son arborescence et ses différentes catégories.

Implémenter une fonction de recherche dans un site Django n’est pas une tâche triviale, notamment si des critères de performance entrent en jeu.

Le projet le plus abouti dans ce domaine est Haystack (meule de foin). Développé par Daniel Lindsay, de toastdriven, haystack est en fait une interface entre votre contenu et un des moteurs de recherche supportés. Haystack s’intègre assez facilement avec la plupart de vos applis. Nous avons à plusieurs reprises utilisés Haystack pour des clients de providenz.

Les moteurs de recherches sont les suivants:

  • solr: moteur open source basé sur la lib java Lucene
  • xapian: moteur open source écrit en c++
  • whoosh: moteur open source en pur python. Pas le plus performant pour un site volumineux, mais le plus simple à installer, notamment sur un serveur mutualisé.

La mise en place d’haystack  est assez simple.

  1. installer haystack et le moteur désiré
  2. créer un searchindex.py qui va définir les champs des models à inclure et enregistrer (register) l’index, un peu sur le principe des admin.py
  3. écrire un template qui va générer le contenu que le moteur va indexer. C’est très intéressant pour les rendus complexes.
  4. ajouter les urls d’haystack à l’urlconf
  5. ecrire un template de recherche (champ/resultat)

L’indexation est commandée par un ‘manage.py rebuild_index’, les mises à jour par ‘manage.py update_index’. ces commandes peuvent être déclenchée par des cronjobs pour maintenir l’index à jour.

Haystack dispose de nombreuses options et possibilités, dépendant en partie du moteur choisi : faceting, plus de résultats, mise en surbrillance, recherche temps réel…

La logique de l’appli est conforme aux principes généraux de django, on n’est pas dépaysé.

On apprécie vraiment haystack, c’est une appli vraiment agréable à mettre en place.

Vous trouverez la page d’Haystack, les docs, et un groupe de discussion.

Bonne recherche !

2 réflexions au sujet de « Haystack, la recherche avec Django »

  1. Je l’ai mis en place suite à ton article. C’est effectivement assez simple. J’aurais bien voulu utiliser solr comme moteur, mais c’est du Javascript et pas supporté par mon hébergement.
    J’ai mis woosh à la place.