SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQLLilia Sfaxi
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopLilia Sfaxi
 
Rapport projet Master 2 - Intelligence Artificielle
Rapport projet Master 2 - Intelligence ArtificielleRapport projet Master 2 - Intelligence Artificielle
Rapport projet Master 2 - Intelligence ArtificielleYanis Marchand
 
Outils décisionnels : Data-Mining and Data-warehouse
Outils décisionnels : Data-Mining and Data-warehouseOutils décisionnels : Data-Mining and Data-warehouse
Outils décisionnels : Data-Mining and Data-warehouseBEL MRHAR Mohamed Amine
 
Exposé segmentation
Exposé segmentationExposé segmentation
Exposé segmentationDonia Hammami
 
YouTaQA : Système de Questions-Réponses Intelligent basé sur le Deep Learning...
YouTaQA : Système de Questions-Réponses Intelligent basé sur le Deep Learning...YouTaQA : Système de Questions-Réponses Intelligent basé sur le Deep Learning...
YouTaQA : Système de Questions-Réponses Intelligent basé sur le Deep Learning...YounesAGABI
 
La BI : Qu’est-ce que c’est ? A quoi ça sert ?
La BI : Qu’est-ce que c’est ? A quoi ça sert ?La BI : Qu’est-ce que c’est ? A quoi ça sert ?
La BI : Qu’est-ce que c’est ? A quoi ça sert ?Jean-Marc Dupont
 
Data mining - Introduction générale
Data mining - Introduction généraleData mining - Introduction générale
Data mining - Introduction généraleMohamed Heny SELMI
 
Seminaire datamining Ecole de Statistique et d'Economie Appliquée
Seminaire datamining Ecole de Statistique et d'Economie AppliquéeSeminaire datamining Ecole de Statistique et d'Economie Appliquée
Seminaire datamining Ecole de Statistique et d'Economie AppliquéeJean Roger Mably
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptxLamissGhoul1
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : CassandraLilia Sfaxi
 
Translation d'adresse réseau (NAT)
Translation d'adresse réseau (NAT)Translation d'adresse réseau (NAT)
Translation d'adresse réseau (NAT)Manassé Achim kpaya
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en PythonABDESSELAM ARROU
 
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdfLUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdfRedaBelattar
 

Was ist angesagt? (20)

BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans Hadoop
 
Rapport projet Master 2 - Intelligence Artificielle
Rapport projet Master 2 - Intelligence ArtificielleRapport projet Master 2 - Intelligence Artificielle
Rapport projet Master 2 - Intelligence Artificielle
 
Outils décisionnels : Data-Mining and Data-warehouse
Outils décisionnels : Data-Mining and Data-warehouseOutils décisionnels : Data-Mining and Data-warehouse
Outils décisionnels : Data-Mining and Data-warehouse
 
Data mining - Associativité
Data mining - AssociativitéData mining - Associativité
Data mining - Associativité
 
Exposé segmentation
Exposé segmentationExposé segmentation
Exposé segmentation
 
Data Mining
Data MiningData Mining
Data Mining
 
YouTaQA : Système de Questions-Réponses Intelligent basé sur le Deep Learning...
YouTaQA : Système de Questions-Réponses Intelligent basé sur le Deep Learning...YouTaQA : Système de Questions-Réponses Intelligent basé sur le Deep Learning...
YouTaQA : Système de Questions-Réponses Intelligent basé sur le Deep Learning...
 
La BI : Qu’est-ce que c’est ? A quoi ça sert ?
La BI : Qu’est-ce que c’est ? A quoi ça sert ?La BI : Qu’est-ce que c’est ? A quoi ça sert ?
La BI : Qu’est-ce que c’est ? A quoi ça sert ?
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Data mining - Introduction générale
Data mining - Introduction généraleData mining - Introduction générale
Data mining - Introduction générale
 
Seminaire datamining Ecole de Statistique et d'Economie Appliquée
Seminaire datamining Ecole de Statistique et d'Economie AppliquéeSeminaire datamining Ecole de Statistique et d'Economie Appliquée
Seminaire datamining Ecole de Statistique et d'Economie Appliquée
 
Règles d’association
Règles d’associationRègles d’association
Règles d’association
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : Cassandra
 
Translation d'adresse réseau (NAT)
Translation d'adresse réseau (NAT)Translation d'adresse réseau (NAT)
Translation d'adresse réseau (NAT)
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdfLUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
 
Tp n 4 linux
Tp n 4 linuxTp n 4 linux
Tp n 4 linux
 

Andere mochten auch

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
 

Andere mochten auch (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
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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