Conférence Sesql - DjangoCong 2011

18
SeSQL : un moteur de recherche puissant et efficace Gaël LE MIGNOT Bruno DUPUIS Pilot Systems 5 avril 2011 Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

description

Présentation de Sesql, un moteur de recherche performant pour PostgreSQL et Python, à la DjangoCong

Transcript of Conférence Sesql - DjangoCong 2011

SeSQL : un moteur de recherche puissant etefficace

Gaël LE MIGNOT

Bruno DUPUIS

Pilot Systems

5 avril 2011

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Plan

1 Introduction

2 Architecture

3 Fonctionnalités

4 Performances

5 Conclusion

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Introduction

Contexte original

Quotidien LibérationLibération actuellement en PHP, migration Django en coursPour le front-office comme pour le back-office

Solution précédentePropriétaire, sous Windows (TextML)Problèmes de performances et de stabilité

Volumétrie685 331 articles165 551 pagesplus de 100 000 contenus divers

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Architecture

Architecture

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Architecture initiale

FonctionnementSolution propriétaire sous WindowsUtilisée par des appels XML depuis le PHP

Schéma

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Architecture de la v1 de SeSQL

FonctionnementWebservice en Python purCompatible niveau API avec TextML

Schéma

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Architecture de la v2 de SeSQL

FonctionnementApplication DjangoNécessite PostgreSQLUtilise Q et renvoie des modèles Django

Schéma

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Fonctionnalités

Fonctionnalités

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Recherche multi-critères

Définition des indexDéfinis dans un fichier spécifique, sesql_config.pyPossibilité de définir plusieurs index (privés, publics, ...)Gestion des index composites, pouvant suivre les relationsGestion d’index fulltextes, multivalués, ...Gestion des dictionnaires (stopwords, recherche de racine,...)

Utilisation de l’objet QSupport de critères comme __containswords ou__containsexact

Support des connecteurs logiques (AND, OR, NOT)Renvoi des objets Django

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Recherches courtes et longues

Recherches courtesRetournent un petit nombre d’éléments (une cinquantaine)Utilisent des heuristiques pour aller très vite pour renvoyerdu contenu récentPas de décompte des résultats, ni de paginationIdéal pour des portlets, requêtes de navigation, ...

Recherches longues

Gèrent la pagination de manière stable (même si ducontenu est inséré)Décomptent le nombre exact de résultatSupportent le tri par pertinence

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Gestion des dépendances

UtilitéL’indexation suit les relationsPar exemple on indexe le nom de l’auteur de l’articleMais l’auteur change de nom...il faut réindexer tous les articles !

FonctionnementUne méthode à implémenter sur les modèlesEnsuite, automatiquement, les objets à réindexer sontajoutés dans une tableUn deamon les reindexe en tâche de fond

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

À venir

Suggestions de recherches

On stock les recherches effectuéesOn garde des informations comme la date et le nombre derésultatsQuand une recherche est faite, on calcule un score à partirde tout çaEt on suggère des recherches proches.

Utilisation dans l’admin DjangoFonctionnel, mais quick and dirtyOn écrit sesql:index dans les modèles de l’adminSera bientôt intégré

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Performances

Performances

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Contexte du bench

Précautions d’usage

There are three kind of lies : lies, damn lies and benchmarks.

RequêtesProviennent de la prod du back-office LibérationEffectuées sur la v1 de SeSQL

TestsRequêtes séquentiellesRequêtes concurrentes, dans des threads

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Contexte du bench

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Conclusion

Conclusion

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

Conclusion

Situation actuelleSeSQL disponible en GPL sur bitbucketUtilisé en production sur Libération (front et back)Utilisé sur d’autres projets Django

Évolutions futuresRendre le processus d’installation plus aiséGestion des suggestions de rechercheIntégration à haystack?

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace

En attendant

Remerciementsaux communautés PostgreSQL, Python et Djangoà Libération de nous avoir fait confianceà Jérôme Petazzoni qui a contribué à la conception

La page de pub

Pilot Systems, société de services en logiciels libres :http://www.pilotsystems.net

Slides en licence CC-By-Sahttp://contributions.pilotsystems.net/

Des questions ?

Gaël LE MIGNOT Bruno DUPUIS Pilot Systems SeSQL : un moteur de recherche puissant et efficace