Indexation facile et rapide avec XapianJ'en avais parlé il y a quelques mois, Xapian est très simple à utiliser et à mettre en oeuvre pour des besoins légers d'indexation. Malgré son API très orientée page html (chaque document indexé l'est avec le contenu de la page), l'outil peut être utilisé pour fournir un moteur de recherche light rapide. Le système de Query qui pêchait encore il y a quelque temps (combinaisons limitées) est maintenant plus complet.
Xapian s'installe très facilement, ainsi que son binding Python (voir site) J'avais besoin d'un petit moteur pour un site que je suis en train de monter en Django. Voici le principe mise en oeuvre:
La base est créé par l'API flint_open: >>> import xapianPuis chaque document est indexé par la création d'un Document et un appel successif à ses méthodes add_term et add_posting, sachant que set_data n'est pas utilisé dans notre cas.
Pour des besoins simples d'indexation, set_data se contente de stocker un identifiant unique, comme un uuid ou une url: >>> uri = '111'Enfin, chaque mot est associé au document avec add_posting: >>> i = 1Puis le document ajouté à la base: >>> DB.add_document(doc) La recherche est ensuite effectuée par le biais d'un object Query: >>> enquire = xapian.Enquire(DB) Les API delete_document et replace_document permettent aussi de gérer la réindexation, en retrouvant le document déjà indexé par le biais d'une recherche sur le term qui sert de clef. Xapian fourni également des tokenizers pour faciliter le travail d'extraction des mots à associer au document. J'utilise pour ma part un tokenizer maison plus paramétrable. Si vous avez envie d'utiliser Xapian pour un projet Python, n'hésitez pas à récupérer le paquet (embryon en cours de conception) que j'ai fait sur mon repository. Il gère l'indexation, la réindexation, la suppression, etc. Repo (cliquer sur manifest, puis aller dans 'xap'): http://hg.programmation-python.org/repositories/public/ Il fournit une API extrêment simple à mettre en oeuvre. (c.f. le doctest dans doc/db.txt) Feedback welcome !
|
A propos
|