sesql : un moteur de recherche en python et postgresql

Download SeSQL : un moteur de recherche en Python et PostgreSQL

Post on 29-Nov-2014

1.235 views

Category:

Technology

0 download

Embed Size (px)

DESCRIPTION

 

TRANSCRIPT

  • 1. SeSQL : un moteur de recherche en Python et PostgreSQL Yohann G ABORY Gal L E M IGNOT Pilot Systems 11 juillet 2011Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 2. Plan 1 Introduction Le besoin initial Lhistorique du projet 2 Fonctionnalits de SeSQL Indexation Recherche Fonctionnalits additionnelles 3 Fonctionnement interne Gestion des dpendances Les short queries Quelques optimisations Benchmarks 4 Perspectives pour lavenir Nouvelles fonctionnalits Intgration dautres projets 5 Conclusion Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 3. Introduction Introduction Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 4. Contexte Contexte gnral Quotidien Libration Utilisation en back-ofce dans un premier temps Utilisation en frontal dans un second temps Utilisation de la recherche Navigation Recherches simples Recherches documentaires Solution prcdente Propritaire, sous Windows (TextML) Problmes de performances et de stabilit Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 5. Solution prcdante Schma darchitecture Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 6. Base dindexation Volumtrie 703 701 articles 169 017 pages 4 064 478 commentaires (non indexes dans TextML) 100k contenus divers Types dindex Recherche en texte plein Recherche sur texte exact Filtres sur des mta-donnes : auteurs, catgories, . . . Tri par date Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 7. Interface de recherche Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 8. Version initiale Contraintes Devait rester proche de larchitecture existante Devait sinterfacer avec du code PHP/MySQL Solution Un webservice en Python Une base PostgreSQL spare Une API globalement compatible avec celle de TextML Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 9. Premire version de SeSQL Schma darchitecture Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 10. Deuxime version Contexte Lensemble du site est en cours de migration en Django On souhaite spargner la lourdeur de lAPI XML On souhaite rester aussi prs que possible de Django Solution Une application Django Les recherches sexpriment avec lobjet Q de Django SeSQL renvoie des objets Django Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 11. Deuxime version de SeSQL Schma darchitecture Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 12. Fonctionnalits de SeSQL Fonctionnalits de SeSQL Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 13. Dnition de lindexation Types dindex Types simples : entiers, dates, ... Champs full text Champ multi-valus (pour des relations par exemple) Sources des index Champs du modle Appel des mthodes du modle Suivi des relations Index composite : concatnation, premier non vide, ... Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 14. Intgration avec Django Conguration de SeSQL Une application comme une autre, qui doit tre ajoute dans le settings.py Ncessite un back-end PostgreSQL A son propre chier de conguration, sesql_config.py Dnition des modles indexer Seffectue via la TYPE_MAP dans la conguration Par dfaut suit les hritages Permet de regrouper les contenus cherchs souvent ensembles SeSQL utilise un simple signal post_save Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 15. Un sesql_cong minimalisteFIELDS = (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 Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 16. un exemple dintgration Rook : Recherche 1 500 000 Tweets en full text Des requtes 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 Gal 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 trs compliqu : cheval, chevaux, chevalet Dpend de la langue Peut provoquer des effets de bord Dans SeSQL Utilise les text search conguration de PostgreSQL SeSQL effectue un nettoyage supplmentaire (accents, majuscules, entits HTML, ...) Peut tre dni de manire diffrente par index Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 18. Description dune recherche Utilisation de lobjet Q SeSQL utilise lobjet Q de Django Il permet de dnir des recherches complexes, avec des ET, OU, ngations, ... Chaque lment est compos de : un index, un oprateur et une valeur Les oprateurs Sur du texte : containswords, containsexact, ... Sur des tableaux : containsall, containsany, ... Oprateurs gnriques : plus petit, plus grand, ... Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL
  • 19. Long query et short query Short query Requtes pour de la navigation, un portlet, un aperu, ... Limit un petit nombre (par exemple 50) de rsultats Ne supporte pas le tri par pertinence Extrmement rapides Long query Supporte la pagination de manire stable Envoi le nombre exact de rsultats Peut tre plus lente dans certains cas Yohann G ABORY Gal L E M IGNOT Pilot Systems SeSQL : un moteur de recherche en Python et PostgreSQL