SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
SeSQL : un moteur de recherche en Python et
               PostgreSQL

                   Yohann G ABORY — Gaël L E M IGNOT
                             Pilot Systems


                                      11 juillet 2011




Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Plan
  1      Introduction
            Le besoin initial
            L’historique du projet
  2      Fonctionnalités de SeSQL
            Indexation
            Recherche
            Fonctionnalités additionnelles
  3      Fonctionnement interne
            Gestion des dépendances
            Les short queries
            Quelques optimisations
            Benchmarks
  4      Perspectives pour l’avenir
            Nouvelles fonctionnalités
            Intégration à d’autres projets
  5      Conclusion
      Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Introduction




                              Introduction




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Contexte
  Contexte général
        Quotidien Libération
        Utilisation en back-office dans un premier temps
        Utilisation en frontal dans un second temps

  Utilisation de la recherche
        Navigation
        Recherches simples
        Recherches documentaires

  Solution précédente
        Propriétaire, sous Windows (TextML)
        Problèmes de performances et de stabilité
   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Solution précédante

  Schéma d’architecture




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Base d’indexation

  Volumétrie
      703 701 articles
        169 017 pages
        4 064 478 commentaires (non indexées dans TextML)
         100k contenus divers

  Types d’index
        Recherche en texte plein
        Recherche sur texte exact
        Filtres sur des méta-données : auteurs, catégories, . . .
        Tri par date


   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Interface de recherche




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Version initiale



  Contraintes
      Devait rester proche de l’architecture existante
        Devait s’interfacer avec du code PHP/MySQL

  Solution
      Un webservice en Python
        Une base PostgreSQL séparée
        Une API globalement compatible avec celle de TextML




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Première version de SeSQL


  Schéma d’architecture




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Deuxième version


  Contexte
      L’ensemble du site est en cours de migration en Django
        On souhaite s’épargner la lourdeur de l’API XML
        On souhaite rester aussi près que possible de Django

  Solution
      Une application Django
        Les recherches s’expriment avec l’objet Q de Django
        SeSQL renvoie des objets Django




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Deuxième version de SeSQL



  Schéma d’architecture




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Fonctionnalités de SeSQL




   Fonctionnalités de SeSQL




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Définition de l’indexation


  Types d’index
        Types simples : entiers, dates, ...
        Champs full text
        Champ multi-valués (pour des relations par exemple)

  Sources des index
      Champs du modèle
        Appel à des méthodes du modèle
        Suivi des relations
        Index composite : concaténation, premier non vide, ...



   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Intégration avec Django

  Configuration de SeSQL
        Une application comme une autre, qui doit être ajoutée
        dans le settings.py
        Nécessite un back-end PostgreSQL
        A son propre fichier de configuration, sesql_config.py

  Définition des modèles à indexer
     S’effectue via la TYPE_MAP dans la configuration
        Par défaut suit les héritages
        Permet de regrouper les contenus cherchés souvent
        ensembles
        SeSQL utilise un simple signal post_save

   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Un sesql_config minimaliste
FIELDS = (ClassField("classname"),
          LongIntField("id"),
          DateTimeField("created_at"),
          FullTextField("user","user.screen_name"),
          LongIntField("user_id", "user.id"),
          FullTextField("text",
        ["text"],
        primary=True,
        dictionnary = ’public.lem_french’,
                        ),
          )




 Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
un exemple d’intégration Rook : Recherche



  1 500 000 Tweets en full text
      Des requètes complexes :
        tweets = Tweet.objects.filter(
          user__relation__in = user.relation_set.filter(user_type = "followers")
        ).filter(text__icontains = mot).order_by(’-created_at’)


        Simplissime avec SeSQL :
        ids = request.user.relation_set.filter(user_type="friends").only(’id’)
        results = longquery(Q(user_id__in = ids)&
                            Q(text__containswords = request.GET[’search’] ))




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Gestion de la lexemisation

  Principe
        Prendre le radical des mots
        Peut être très compliqué : cheval, chevaux, chevalet
        Dépend de la langue
        Peut provoquer des effets de bord

  Dans SeSQL
     Utilise les text search configuration de PostgreSQL
        SeSQL effectue un nettoyage supplémentaire (accents,
        majuscules, entités HTML, ...)
        Peut être défini de manière différente par index


   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Description d’une recherche

  Utilisation de l’objet Q
        SeSQL utilise l’objet Q de Django
        Il permet de définir des recherches complexes, avec des
        ET, OU, négations, ...
        Chaque élément est composé de : un index, un opérateur
        et une valeur

  Les opérateurs
        Sur du texte : containswords, containsexact, ...
        Sur des tableaux : containsall, containsany, ...
        Opérateurs génériques : plus petit, plus grand, ...


   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Long query et short query


  Short query
        Requêtes pour de la navigation, un portlet, un aperçu, ...
        Limité à un petit nombre (par exemple 50) de résultats
        Ne supporte pas le tri par pertinence
        Extrêmement rapides

  Long query
        Supporte la pagination de manière stable
        Envoi le nombre exact de résultats
        Peut être plus lente dans certains cas



   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Quelques bonus

  Le tri
       Sur un index numérique ou de date
       Ou alors par pertinence, avec gestion :
               de la pondération (le titre compte plus que le corps du
               texte)
               de la proximité des mots cherchés
               de la fréquence des mots cherchés

  Les résultats
      SeSQLResultSet est un générateur Python, donc lazy
        Renvoi directement les objets Django à l’itération
        Les objets peuvent être de plusieurs types


   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Et en prime...

  Aide au highlight
        Un module spécial est fourni
        Il renvoi la liste des positions, en caractères, des mots
        ayant été trouvés

  SeSQL admin
     Permet d’utiliser SeSQL depuis l’admin Django
        Assez intrusif pour l’instant, donc désactivé par défaut

  Historique
        Collecte les historiques de recherche, en option
        Compte le nombre de résultats et la fréquence des
        recherches

   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Fonctionnement interne




        Fonctionnement interne




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Gestion des dépendances : le problème

  Un exemple
        Dans un module de Quizz, on veut indexer les réponses
        possibles dans l’objet Quizz
        Facile à faire avec SeSQL et les index composites
        Mais si on modifie une réponse, on ne modifie pas l’objet
        Quizz

  Les conséquences
        On veut pouvoir réindexer les objets liés quand on
        réindexe un objet
        Mais il peut y en avoir énormément : imaginons qu’on
        change le nom d’un auteur de 147 789 articles du journal !


   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Gestion des dépendances : la solution

  Le principe
        SeSQL stocke la liste des objets à ré-indexer
        Un daemon autonome s’occupe de les ré-indexer, petit à
        petit

  En pratique
        SeSQL ne détecte pas tout seul les objets liés
        Les modèles peuvent implémenter une méthode
        spécifique, qui indique à SeSQL ce qui doit être réindexé
        Cette méthode peut renvoyer des objets ou des couples
        (class, id).


   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Les short queries : le problème

  Rappel du contexte
        Trouver les 50 articles les plus récentes sur un sujet
        Doit être le plus rapide possible

  Les deux query plans
   1    Parcourir l’index sur les dates, et filtrer les articles
   2    Utiliser l’index sur les articles, puis trier sur les dates

  La limite de PostgreSQL
        PostgreSQL a des statistiques sur les mots
        Mais un mot peut être avoir été fréquent mais ne plus l’être


   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Exemple de plan 1




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Exemple de plan 2




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
L’heuristique


  L’algorithme




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Recherche par texte exact

  Problème
      PostgreSQL n’a pas d’index supportant ça
        Faire un LIKE sur toute la base est bien trop lent

  La solution
      On commence pas filtrer, via l’index, en texte approché
        Puis on refiltre avec un LIKE sur ce qui matché

  La cas France 2
      Beaucoup d’article contiennent les deux mots
        Mais peu le texte exact


   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Les partitions


  Problème
      On veut indexer du contenu très massif (les commentaires)
        On ne veut pas impacter les performances du reste

  La solution
      PostgreSQL supporte l’héritage de tables
        On indexe les commentaires dans une table à part
        On ne cherche que dans une sous-table, si possible
        Si non, on cherche dans la table maîtresse




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
There are three kinds of lies ...




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
... lies, damn lies and benchmarks




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Perspectives pour l’avenir




     Perspectives pour l’avenir




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Quelques idées de nouvelles fonctionnalités


  Suggestions de recherche
        À partir de l’historique
        Propose des recherches proches, fréquentes et ayant
        donné de nombreux résultats

  Gestion améliorée du multilingue
        Ajout d’une détection automatique de la langue
        Choix de la bonne lexemisation en fonction de la langue
        Pouvoir restreindre la recherche par langue




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Possibilité d’intégration à d’autres projets



  Hors Django
        Implémenter une API pour avoir un mode webservice
        Implémenter une API compatible avec le ZCatalog pour
        Zope

  Avec d’autres projets
        Intégration possible avec haystack ?
        Avec des moteurs de classification ?




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Conclusion




                                Conclusion




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
Conclusion




  Situation actuelle
      SeSQL disponible en GPL sur bitbucket
        Utilisé en production sur Libération (front et back)
        Utilisé sur d’autres projets comme Rook




   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL
En attendant

  Remerciements
     aux 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-Sa
        http://contributions.pilotsystems.net/

                                       Des questions ?

   Yohann G ABORY — Gaël L E M IGNOT Pilot Systems   SeSQL : un moteur de recherche en Python et PostgreSQL

Más contenido relacionado

La actualidad más candente

Présentation pfe Big Data Hachem SELMI et Ahmed DRIDI
Présentation pfe Big Data Hachem SELMI et Ahmed DRIDIPrésentation pfe Big Data Hachem SELMI et Ahmed DRIDI
Présentation pfe Big Data Hachem SELMI et Ahmed DRIDIHaShem Selmi
 
Présentation projet de fin d'étude
Présentation projet de fin d'étudePrésentation projet de fin d'étude
Présentation projet de fin d'étudeDonia Hammami
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionECAM Brussels Engineering School
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2Amal Abid
 
présentation soutenance PFE.ppt
présentation soutenance PFE.pptprésentation soutenance PFE.ppt
présentation soutenance PFE.pptMohamed Ben Bouzid
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correctionInes Ouaz
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonAbdoulaye Dieng
 
Cours python
Cours pythonCours python
Cours pythonsalmazen
 
Soutenance De Stage
Soutenance De StageSoutenance De Stage
Soutenance De Stageguesta3231e
 
Rapport de pfe format doc 2013
Rapport de pfe format doc 2013Rapport de pfe format doc 2013
Rapport de pfe format doc 2013Addi Ait-Mlouk
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMajid CHADAD
 
Développement Web - Module 1 - Introduction
Développement Web - Module 1 - IntroductionDéveloppement Web - Module 1 - Introduction
Développement Web - Module 1 - IntroductionMohammed Amine Mostefai
 
Data mining - Classification - arbres de décision
Data mining - Classification - arbres de décisionData mining - Classification - arbres de décision
Data mining - Classification - arbres de décisionMohamed Heny SELMI
 
exercices business intelligence
exercices business intelligence exercices business intelligence
exercices business intelligence Yassine Badri
 
Projet de Conception et de développement
Projet de Conception et de développement Projet de Conception et de développement
Projet de Conception et de développement mtir elhem
 
Ma présentation PFE
Ma présentation PFEMa présentation PFE
Ma présentation PFELouati Aicha
 
Modèles de langue : Ngrammes
Modèles de langue : NgrammesModèles de langue : Ngrammes
Modèles de langue : NgrammesJaouad Dabounou
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...ENSET, Université Hassan II Casablanca
 

La actualidad más candente (20)

Présentation pfe Big Data Hachem SELMI et Ahmed DRIDI
Présentation pfe Big Data Hachem SELMI et Ahmed DRIDIPrésentation pfe Big Data Hachem SELMI et Ahmed DRIDI
Présentation pfe Big Data Hachem SELMI et Ahmed DRIDI
 
Présentation projet de fin d'étude
Présentation projet de fin d'étudePrésentation projet de fin d'étude
Présentation projet de fin d'étude
 
Hive ppt (1)
Hive ppt (1)Hive ppt (1)
Hive ppt (1)
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
 
présentation soutenance PFE.ppt
présentation soutenance PFE.pptprésentation soutenance PFE.ppt
présentation soutenance PFE.ppt
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
Introduction aux SGBD
Introduction aux SGBDIntroduction aux SGBD
Introduction aux SGBD
 
Cours python
Cours pythonCours python
Cours python
 
Soutenance De Stage
Soutenance De StageSoutenance De Stage
Soutenance De Stage
 
Rapport de pfe format doc 2013
Rapport de pfe format doc 2013Rapport de pfe format doc 2013
Rapport de pfe format doc 2013
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigés
 
Développement Web - Module 1 - Introduction
Développement Web - Module 1 - IntroductionDéveloppement Web - Module 1 - Introduction
Développement Web - Module 1 - Introduction
 
Data mining - Classification - arbres de décision
Data mining - Classification - arbres de décisionData mining - Classification - arbres de décision
Data mining - Classification - arbres de décision
 
exercices business intelligence
exercices business intelligence exercices business intelligence
exercices business intelligence
 
Projet de Conception et de développement
Projet de Conception et de développement Projet de Conception et de développement
Projet de Conception et de développement
 
Ma présentation PFE
Ma présentation PFEMa présentation PFE
Ma présentation PFE
 
Modèles de langue : Ngrammes
Modèles de langue : NgrammesModèles de langue : Ngrammes
Modèles de langue : Ngrammes
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
 

Destacado

Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonMohammed TAMALI
 
Cypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCERTyou Formation
 
OpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizonOpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizonYannick Foeillet
 
Aiguille dans botte de foin: scikit-learn et joblib
Aiguille dans botte de foin: scikit-learn et joblibAiguille dans botte de foin: scikit-learn et joblib
Aiguille dans botte de foin: scikit-learn et joblibGael Varoquaux
 
Sondage aléatoire simple ou a probabilité égal
Sondage aléatoire simple ou a probabilité égal Sondage aléatoire simple ou a probabilité égal
Sondage aléatoire simple ou a probabilité égal hammamiahlem1
 
Je configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtoolsJe configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtoolsRonan Amicel
 
Scikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en PythonScikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en PythonGael Varoquaux
 
Les langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésLes langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésmercury_wood
 
Scikit-learn: the state of the union 2016
Scikit-learn: the state of the union 2016Scikit-learn: the state of the union 2016
Scikit-learn: the state of the union 2016Gael Varoquaux
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Pythonyboussard
 
Modelisation agile 03122011
Modelisation agile  03122011Modelisation agile  03122011
Modelisation agile 03122011agnes_crepet
 
Presentation r markdown
Presentation r markdown Presentation r markdown
Presentation r markdown Cdiscount
 
Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2Emeric Tapachès
 
Python et les bases de données non sql
Python et les bases de données non sqlPython et les bases de données non sql
Python et les bases de données non sqlbchesneau
 

Destacado (20)

Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec python
 
Cypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-python
 
OpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizonOpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizon
 
La sabiduría
La sabiduríaLa sabiduría
La sabiduría
 
Aiguille dans botte de foin: scikit-learn et joblib
Aiguille dans botte de foin: scikit-learn et joblibAiguille dans botte de foin: scikit-learn et joblib
Aiguille dans botte de foin: scikit-learn et joblib
 
Sondage aléatoire simple ou a probabilité égal
Sondage aléatoire simple ou a probabilité égal Sondage aléatoire simple ou a probabilité égal
Sondage aléatoire simple ou a probabilité égal
 
Solucion y Psicologia del Bienestar
Solucion y Psicologia del BienestarSolucion y Psicologia del Bienestar
Solucion y Psicologia del Bienestar
 
Je configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtoolsJe configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtools
 
Python et NoSQL
Python et NoSQLPython et NoSQL
Python et NoSQL
 
Python debugger
Python debuggerPython debugger
Python debugger
 
Scikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en PythonScikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en Python
 
Les langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésLes langages de programmation sont trop compliqués
Les langages de programmation sont trop compliqués
 
Scikit-learn: the state of the union 2016
Scikit-learn: the state of the union 2016Scikit-learn: the state of the union 2016
Scikit-learn: the state of the union 2016
 
Python packaging
Python packagingPython packaging
Python packaging
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
Modelisation agile 03122011
Modelisation agile  03122011Modelisation agile  03122011
Modelisation agile 03122011
 
Presentation r markdown
Presentation r markdown Presentation r markdown
Presentation r markdown
 
Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2
 
R versur Python
R versur PythonR versur Python
R versur Python
 
Python et les bases de données non sql
Python et les bases de données non sqlPython et les bases de données non sql
Python et les bases de données non sql
 

Similar a SeSQL : un moteur de recherche en Python et PostgreSQL

Conférence Sesql - DjangoCong 2011
Conférence Sesql - DjangoCong 2011Conférence Sesql - DjangoCong 2011
Conférence Sesql - DjangoCong 2011Paris, France
 
Indexation d'une base documentaire pour Liberation
Indexation d'une base documentaire pour LiberationIndexation d'une base documentaire pour Liberation
Indexation d'une base documentaire pour LiberationParis, France
 
Les micro orm, alternatives à entity framework
Les micro orm, alternatives à entity frameworkLes micro orm, alternatives à entity framework
Les micro orm, alternatives à entity frameworkMSDEVMTL
 
Entity framework core 2 vs micro orm performances
Entity framework core 2 vs micro orm performancesEntity framework core 2 vs micro orm performances
Entity framework core 2 vs micro orm performancesMSDEVMTL
 
Google datastore & search API
Google datastore & search APIGoogle datastore & search API
Google datastore & search APICéline Louvet
 
Google datastore & search api
Google datastore & search apiGoogle datastore & search api
Google datastore & search apiGeoffrey Garnotel
 
Presentation solr 10 Aout 2011 (french)
Presentation solr 10 Aout 2011 (french)Presentation solr 10 Aout 2011 (french)
Presentation solr 10 Aout 2011 (french)Thibaud Vibes
 
Geneva jug Lucene Solr
Geneva jug Lucene Solr Geneva jug Lucene Solr
Geneva jug Lucene Solr francelabs
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPkemenaran
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?Sébastien Prunier
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity frameworkDNG Consulting
 
POO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdfPOO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdfLarbaSAWADOGO2
 
Presentation Lucene / Solr / Datafari - Nantes JUG
Presentation Lucene / Solr / Datafari - Nantes JUGPresentation Lucene / Solr / Datafari - Nantes JUG
Presentation Lucene / Solr / Datafari - Nantes JUGfrancelabs
 
T3UNIFR11 - TYPO3 et les moteurs de recherche
T3UNIFR11 - TYPO3 et les moteurs de rechercheT3UNIFR11 - TYPO3 et les moteurs de recherche
T3UNIFR11 - TYPO3 et les moteurs de recherchesitengo
 
Oxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewOxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewLudovic Piot
 

Similar a SeSQL : un moteur de recherche en Python et PostgreSQL (20)

Conférence Sesql - DjangoCong 2011
Conférence Sesql - DjangoCong 2011Conférence Sesql - DjangoCong 2011
Conférence Sesql - DjangoCong 2011
 
Indexation d'une base documentaire pour Liberation
Indexation d'une base documentaire pour LiberationIndexation d'une base documentaire pour Liberation
Indexation d'une base documentaire pour Liberation
 
Les micro orm, alternatives à entity framework
Les micro orm, alternatives à entity frameworkLes micro orm, alternatives à entity framework
Les micro orm, alternatives à entity framework
 
Entity framework core 2 vs micro orm performances
Entity framework core 2 vs micro orm performancesEntity framework core 2 vs micro orm performances
Entity framework core 2 vs micro orm performances
 
Google datastore & search API
Google datastore & search APIGoogle datastore & search API
Google datastore & search API
 
Google datastore & search api
Google datastore & search apiGoogle datastore & search api
Google datastore & search api
 
Presentation solr 10 Aout 2011 (french)
Presentation solr 10 Aout 2011 (french)Presentation solr 10 Aout 2011 (french)
Presentation solr 10 Aout 2011 (french)
 
Show de boucane pour ELK
Show de boucane pour ELKShow de boucane pour ELK
Show de boucane pour ELK
 
Mongo db with C#
Mongo db with C#Mongo db with C#
Mongo db with C#
 
Geneva jug Lucene Solr
Geneva jug Lucene Solr Geneva jug Lucene Solr
Geneva jug Lucene Solr
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
Drools
DroolsDrools
Drools
 
Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity framework
 
POO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdfPOO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdf
 
Presentation Lucene / Solr / Datafari - Nantes JUG
Presentation Lucene / Solr / Datafari - Nantes JUGPresentation Lucene / Solr / Datafari - Nantes JUG
Presentation Lucene / Solr / Datafari - Nantes JUG
 
T3UNIFR11 - TYPO3 et les moteurs de recherche
T3UNIFR11 - TYPO3 et les moteurs de rechercheT3UNIFR11 - TYPO3 et les moteurs de recherche
T3UNIFR11 - TYPO3 et les moteurs de recherche
 
Spring Batch
Spring BatchSpring Batch
Spring Batch
 
Oxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overviewOxalide Workshop #3 - Elasticearch, an overview
Oxalide Workshop #3 - Elasticearch, an overview
 

Más de Paris, France

Transformation digitale
Transformation digitaleTransformation digitale
Transformation digitaleParis, France
 
Django Hacking : Comment dresser les serpents guitaristes
Django Hacking : Comment dresser les serpents guitaristesDjango Hacking : Comment dresser les serpents guitaristes
Django Hacking : Comment dresser les serpents guitaristesParis, France
 
Neopod: une base de données objet distribuée
Neopod: une base de données objet distribuéeNeopod: une base de données objet distribuée
Neopod: une base de données objet distribuéeParis, France
 
API Cockpit : faites communiquer vos applications web
API Cockpit : faites communiquer vos applications webAPI Cockpit : faites communiquer vos applications web
API Cockpit : faites communiquer vos applications webParis, France
 
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...Paris, France
 
Plone Conference 2008 Lightning Talk Static Zope Rpx
Plone Conference 2008 Lightning Talk Static Zope RpxPlone Conference 2008 Lightning Talk Static Zope Rpx
Plone Conference 2008 Lightning Talk Static Zope RpxParis, France
 
Neoppod, discloses first open source transactional NoSQL Object database for ...
Neoppod, discloses first open source transactional NoSQL Object database for ...Neoppod, discloses first open source transactional NoSQL Object database for ...
Neoppod, discloses first open source transactional NoSQL Object database for ...Paris, France
 
Cockpit, gestion de contacts et d'emailing
Cockpit, gestion de contacts et d'emailingCockpit, gestion de contacts et d'emailing
Cockpit, gestion de contacts et d'emailingParis, France
 
Plone, du site web à la gestion documentaire
Plone, du site web à la gestion documentairePlone, du site web à la gestion documentaire
Plone, du site web à la gestion documentaireParis, France
 
Les critères de choix d'un intranet
Les critères de choix d'un intranetLes critères de choix d'un intranet
Les critères de choix d'un intranetParis, France
 
Virtualisation Cloud Computing Saas Open Source
Virtualisation Cloud Computing Saas Open SourceVirtualisation Cloud Computing Saas Open Source
Virtualisation Cloud Computing Saas Open SourceParis, France
 
Partenariat Exo Platform/Pilot Systems
Partenariat Exo Platform/Pilot SystemsPartenariat Exo Platform/Pilot Systems
Partenariat Exo Platform/Pilot SystemsParis, France
 
Open World Forum 2009 Synthesis
Open World Forum 2009 SynthesisOpen World Forum 2009 Synthesis
Open World Forum 2009 SynthesisParis, France
 
Open World Forum 2009 Presentation
Open World Forum 2009 PresentationOpen World Forum 2009 Presentation
Open World Forum 2009 PresentationParis, France
 
Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...
Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...
Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...Paris, France
 
Deploiement de Plone et Deliverance avec Ubuntu VM Builder
Deploiement de Plone et Deliverance avec Ubuntu VM BuilderDeploiement de Plone et Deliverance avec Ubuntu VM Builder
Deploiement de Plone et Deliverance avec Ubuntu VM BuilderParis, France
 
Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...
Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...
Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...Paris, France
 
Construire un module enfichable (pluggable) et dynamique pour Plone
Construire un module enfichable (pluggable) et dynamique pour PloneConstruire un module enfichable (pluggable) et dynamique pour Plone
Construire un module enfichable (pluggable) et dynamique pour PloneParis, France
 
La virtualisation dans le Datacenter
La virtualisation dans le DatacenterLa virtualisation dans le Datacenter
La virtualisation dans le DatacenterParis, France
 
Guide pratique des logiciels libres dans les administrations
Guide pratique des logiciels libres dans les administrationsGuide pratique des logiciels libres dans les administrations
Guide pratique des logiciels libres dans les administrationsParis, France
 

Más de Paris, France (20)

Transformation digitale
Transformation digitaleTransformation digitale
Transformation digitale
 
Django Hacking : Comment dresser les serpents guitaristes
Django Hacking : Comment dresser les serpents guitaristesDjango Hacking : Comment dresser les serpents guitaristes
Django Hacking : Comment dresser les serpents guitaristes
 
Neopod: une base de données objet distribuée
Neopod: une base de données objet distribuéeNeopod: une base de données objet distribuée
Neopod: une base de données objet distribuée
 
API Cockpit : faites communiquer vos applications web
API Cockpit : faites communiquer vos applications webAPI Cockpit : faites communiquer vos applications web
API Cockpit : faites communiquer vos applications web
 
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
Systematic/NEOPPOD dévoilent la première base de données objets NoSQL Open So...
 
Plone Conference 2008 Lightning Talk Static Zope Rpx
Plone Conference 2008 Lightning Talk Static Zope RpxPlone Conference 2008 Lightning Talk Static Zope Rpx
Plone Conference 2008 Lightning Talk Static Zope Rpx
 
Neoppod, discloses first open source transactional NoSQL Object database for ...
Neoppod, discloses first open source transactional NoSQL Object database for ...Neoppod, discloses first open source transactional NoSQL Object database for ...
Neoppod, discloses first open source transactional NoSQL Object database for ...
 
Cockpit, gestion de contacts et d'emailing
Cockpit, gestion de contacts et d'emailingCockpit, gestion de contacts et d'emailing
Cockpit, gestion de contacts et d'emailing
 
Plone, du site web à la gestion documentaire
Plone, du site web à la gestion documentairePlone, du site web à la gestion documentaire
Plone, du site web à la gestion documentaire
 
Les critères de choix d'un intranet
Les critères de choix d'un intranetLes critères de choix d'un intranet
Les critères de choix d'un intranet
 
Virtualisation Cloud Computing Saas Open Source
Virtualisation Cloud Computing Saas Open SourceVirtualisation Cloud Computing Saas Open Source
Virtualisation Cloud Computing Saas Open Source
 
Partenariat Exo Platform/Pilot Systems
Partenariat Exo Platform/Pilot SystemsPartenariat Exo Platform/Pilot Systems
Partenariat Exo Platform/Pilot Systems
 
Open World Forum 2009 Synthesis
Open World Forum 2009 SynthesisOpen World Forum 2009 Synthesis
Open World Forum 2009 Synthesis
 
Open World Forum 2009 Presentation
Open World Forum 2009 PresentationOpen World Forum 2009 Presentation
Open World Forum 2009 Presentation
 
Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...
Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...
Deliverance, la puissance de la gestion de contenu Plone appliquee aux themes...
 
Deploiement de Plone et Deliverance avec Ubuntu VM Builder
Deploiement de Plone et Deliverance avec Ubuntu VM BuilderDeploiement de Plone et Deliverance avec Ubuntu VM Builder
Deploiement de Plone et Deliverance avec Ubuntu VM Builder
 
Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...
Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...
Deliverance, la puissance de la gestion de contenu Plone appliquée aux thèmes...
 
Construire un module enfichable (pluggable) et dynamique pour Plone
Construire un module enfichable (pluggable) et dynamique pour PloneConstruire un module enfichable (pluggable) et dynamique pour Plone
Construire un module enfichable (pluggable) et dynamique pour Plone
 
La virtualisation dans le Datacenter
La virtualisation dans le DatacenterLa virtualisation dans le Datacenter
La virtualisation dans le Datacenter
 
Guide pratique des logiciels libres dans les administrations
Guide pratique des logiciels libres dans les administrationsGuide pratique des logiciels libres dans les administrations
Guide pratique des logiciels libres dans les administrations
 

SeSQL : un moteur de recherche en Python et PostgreSQL

  • 1. SeSQL : un moteur de recherche en Python et PostgreSQL Yohann G ABORY — Gaël L E M IGNOT Pilot Systems 11 juillet 2011 Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 2. Plan 1 Introduction Le besoin initial L’historique du projet 2 Fonctionnalités de SeSQL Indexation Recherche Fonctionnalités additionnelles 3 Fonctionnement interne Gestion des dépendances Les short queries Quelques optimisations Benchmarks 4 Perspectives pour l’avenir Nouvelles fonctionnalités Intégration à d’autres projets 5 Conclusion Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 3. Introduction Introduction Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 4. Contexte Contexte général Quotidien Libération Utilisation en back-office dans un premier temps Utilisation en frontal dans un second temps Utilisation de la recherche Navigation Recherches simples Recherches documentaires Solution précédente Propriétaire, sous Windows (TextML) Problèmes de performances et de stabilité Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 5. Solution précédante Schéma d’architecture Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 6. Base d’indexation Volumétrie 703 701 articles 169 017 pages 4 064 478 commentaires (non indexées dans TextML) 100k contenus divers Types d’index Recherche en texte plein Recherche sur texte exact Filtres sur des méta-données : auteurs, catégories, . . . Tri par date Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 7. Interface de recherche Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 8. Version initiale Contraintes Devait rester proche de l’architecture existante Devait s’interfacer avec du code PHP/MySQL Solution Un webservice en Python Une base PostgreSQL séparée Une API globalement compatible avec celle de TextML Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 9. Première version de SeSQL Schéma d’architecture Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 10. Deuxième version Contexte L’ensemble du site est en cours de migration en Django On souhaite s’épargner la lourdeur de l’API XML On souhaite rester aussi près que possible de Django Solution Une application Django Les recherches s’expriment avec l’objet Q de Django SeSQL renvoie des objets Django Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 11. Deuxième version de SeSQL Schéma d’architecture Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 12. Fonctionnalités de SeSQL Fonctionnalités de SeSQL Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 13. Définition de l’indexation Types d’index Types simples : entiers, dates, ... Champs full text Champ multi-valués (pour des relations par exemple) Sources des index Champs du modèle Appel à des méthodes du modèle Suivi des relations Index composite : concaténation, premier non vide, ... Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 14. Intégration avec Django Configuration de SeSQL Une application comme une autre, qui doit être ajoutée dans le settings.py Nécessite un back-end PostgreSQL A son propre fichier de configuration, sesql_config.py Définition des modèles à indexer S’effectue via la TYPE_MAP dans la configuration Par défaut suit les héritages Permet de regrouper les contenus cherchés souvent ensembles SeSQL utilise un simple signal post_save Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 15. Un sesql_config minimaliste FIELDS = (ClassField("classname"), LongIntField("id"), DateTimeField("created_at"), FullTextField("user","user.screen_name"), LongIntField("user_id", "user.id"), FullTextField("text", ["text"], primary=True, dictionnary = ’public.lem_french’, ), ) Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 16. un exemple d’intégration Rook : Recherche 1 500 000 Tweets en full text Des requètes complexes : tweets = Tweet.objects.filter( user__relation__in = user.relation_set.filter(user_type = "followers") ).filter(text__icontains = mot).order_by(’-created_at’) Simplissime avec SeSQL : ids = request.user.relation_set.filter(user_type="friends").only(’id’) results = longquery(Q(user_id__in = ids)& Q(text__containswords = request.GET[’search’] )) Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 17. Gestion de la lexemisation Principe Prendre le radical des mots Peut être très compliqué : cheval, chevaux, chevalet Dépend de la langue Peut provoquer des effets de bord Dans SeSQL Utilise les text search configuration de PostgreSQL SeSQL effectue un nettoyage supplémentaire (accents, majuscules, entités HTML, ...) Peut être défini de manière différente par index Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 18. Description d’une recherche Utilisation de l’objet Q SeSQL utilise l’objet Q de Django Il permet de définir des recherches complexes, avec des ET, OU, négations, ... Chaque élément est composé de : un index, un opérateur et une valeur Les opérateurs Sur du texte : containswords, containsexact, ... Sur des tableaux : containsall, containsany, ... Opérateurs génériques : plus petit, plus grand, ... Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 19. Long query et short query Short query Requêtes pour de la navigation, un portlet, un aperçu, ... Limité à un petit nombre (par exemple 50) de résultats Ne supporte pas le tri par pertinence Extrêmement rapides Long query Supporte la pagination de manière stable Envoi le nombre exact de résultats Peut être plus lente dans certains cas Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 20. Quelques bonus Le tri Sur un index numérique ou de date Ou alors par pertinence, avec gestion : de la pondération (le titre compte plus que le corps du texte) de la proximité des mots cherchés de la fréquence des mots cherchés Les résultats SeSQLResultSet est un générateur Python, donc lazy Renvoi directement les objets Django à l’itération Les objets peuvent être de plusieurs types Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 21. Et en prime... Aide au highlight Un module spécial est fourni Il renvoi la liste des positions, en caractères, des mots ayant été trouvés SeSQL admin Permet d’utiliser SeSQL depuis l’admin Django Assez intrusif pour l’instant, donc désactivé par défaut Historique Collecte les historiques de recherche, en option Compte le nombre de résultats et la fréquence des recherches Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 22. Fonctionnement interne Fonctionnement interne Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 23. Gestion des dépendances : le problème Un exemple Dans un module de Quizz, on veut indexer les réponses possibles dans l’objet Quizz Facile à faire avec SeSQL et les index composites Mais si on modifie une réponse, on ne modifie pas l’objet Quizz Les conséquences On veut pouvoir réindexer les objets liés quand on réindexe un objet Mais il peut y en avoir énormément : imaginons qu’on change le nom d’un auteur de 147 789 articles du journal ! Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 24. Gestion des dépendances : la solution Le principe SeSQL stocke la liste des objets à ré-indexer Un daemon autonome s’occupe de les ré-indexer, petit à petit En pratique SeSQL ne détecte pas tout seul les objets liés Les modèles peuvent implémenter une méthode spécifique, qui indique à SeSQL ce qui doit être réindexé Cette méthode peut renvoyer des objets ou des couples (class, id). Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 25. Les short queries : le problème Rappel du contexte Trouver les 50 articles les plus récentes sur un sujet Doit être le plus rapide possible Les deux query plans 1 Parcourir l’index sur les dates, et filtrer les articles 2 Utiliser l’index sur les articles, puis trier sur les dates La limite de PostgreSQL PostgreSQL a des statistiques sur les mots Mais un mot peut être avoir été fréquent mais ne plus l’être Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 26. Exemple de plan 1 Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 27. Exemple de plan 2 Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 28. L’heuristique L’algorithme Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 29. Recherche par texte exact Problème PostgreSQL n’a pas d’index supportant ça Faire un LIKE sur toute la base est bien trop lent La solution On commence pas filtrer, via l’index, en texte approché Puis on refiltre avec un LIKE sur ce qui matché La cas France 2 Beaucoup d’article contiennent les deux mots Mais peu le texte exact Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 30. Les partitions Problème On veut indexer du contenu très massif (les commentaires) On ne veut pas impacter les performances du reste La solution PostgreSQL supporte l’héritage de tables On indexe les commentaires dans une table à part On ne cherche que dans une sous-table, si possible Si non, on cherche dans la table maîtresse Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 31. There are three kinds of lies ... Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 32. ... lies, damn lies and benchmarks Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 33. Perspectives pour l’avenir Perspectives pour l’avenir Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 34. Quelques idées de nouvelles fonctionnalités Suggestions de recherche À partir de l’historique Propose des recherches proches, fréquentes et ayant donné de nombreux résultats Gestion améliorée du multilingue Ajout d’une détection automatique de la langue Choix de la bonne lexemisation en fonction de la langue Pouvoir restreindre la recherche par langue Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 35. Possibilité d’intégration à d’autres projets Hors Django Implémenter une API pour avoir un mode webservice Implémenter une API compatible avec le ZCatalog pour Zope Avec d’autres projets Intégration possible avec haystack ? Avec des moteurs de classification ? Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 36. Conclusion Conclusion Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 37. Conclusion Situation actuelle SeSQL disponible en GPL sur bitbucket Utilisé en production sur Libération (front et back) Utilisé sur d’autres projets comme Rook Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 38. En attendant Remerciements aux 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-Sa http://contributions.pilotsystems.net/ Des questions ? Yohann G ABORY — Gaël L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL