1 / 20

Fonctionnalités et limites d’outils d’indexation et de recherche "full text"

Fonctionnalités et limites d’outils d’indexation et de recherche "full text". Tsearch2 (PostgreSQL). C’est quoi Tsearch2 ?. C’est quoi tsearch2. Un module de recherche plein texte Spécifique du SGBD PostgreSQL

Download Presentation

Fonctionnalités et limites d’outils d’indexation et de recherche "full text"

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Fonctionnalités et limites d’outils d’indexation et de recherche "full text" Tsearch2 (PostgreSQL) Réseau BD 11/12/08

  2. C’est quoi Tsearch2 ? Réseau BD 11/12/08

  3. C’est quoi tsearch2 • Un module de recherche plein texte • Spécifique du SGBD PostgreSQL • en module contrib à partir 7.4 http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/docs/tsearch-V2-intro.html • intégré au moteur en 8.3, avec une meilleure gestion, de nouveaux langages et de nouveaux dictionnaires http://docs.postgresql.fr/8.3/pg83.pdf • Utilisé généralement sur des champs texte en langage naturel (ex: titres de films) Réseau BD 11/12/08

  4. Pourquoi tsearch2 ? • Les recherches de texte du type LIKE, ILIKE, ~ et ~* ne suffisent pas pour des recherches en langue naturelle. • Avec les outils tsearch2, on peut transformer une phrase en un ensemble d’unités lexicales qui sont appelées lexèmes. • En linguistique : morphème n.m., unité minimale de signification: Dans le mot " mangiez ", " -iez " est un morphème grammatical (= 2 e personne du pluriel), et " mang- " est un morphème lexical (= lexème). • On peut les stocker, les indexer et faire des recherches à partir d’eux. Réseau BD 11/12/08

  5. Description tsearch2 • Tsearch2 propose plusieurs dictionnaires (anglais, espagnol, français, ..) • Un certain nombre de mots comme the, of, etc.. ne seront pas indexés. Une liste par défaut existe. Elle peut-être modifiée. • On peut stocker et indexer les lexèmes de plusieurs champs dans un seul champ.A partir du lexème, on recherchera donc les enregistrements dont le champ A ou le champ B ou le champ C ..  • On peut utiliser les opérateurs booléens, pour faire une recherche sur les lexèmes. (and , or , not)  Réseau BD 11/12/08

  6. Tsearch2 utilisé à l’URGI Réseau BD 11/12/08

  7. Tsearch2 à l’URGI • Utilisé en 2006 • Avec la version 7.4 de PostgreSQL • Pour améliorer les performances (like ‘%nom%’ n’utilise pas d’index) • Sur des données d’ontologies (GO) • Avec un dictionnaire en anglais • Abandonné car cela ne correspondait pas à nos besoins . Réseau BD 11/12/08

  8. Exemple • Table cvterm: • champ name (character) • champ definition (text) • name: • phosphocreatine catabolism • Definition: • The breakdown into simpler components of phosphocreatine, a phosphagen of creatine which is synthesized and broken down by creatine phosphokinase. • Recherche dans champ définition Réseau BD 11/12/08

  9. Exemple: que fait tsearch2 ? • Definition: • The breakdown into simplercomponents of phosphocreatine, a phosphagen of creatine which is synthesized and broken down by creatine phosphokinase. • Nouvelle colonne idxdefinition • 'broken':16 'compon':5 'creatin':11,19 'simpler':4 'synthes':14 'breakdown':2 'phosphagen':9 'phosphokinas':20 'phosphocreatin':7 Réseau BD 11/12/08

  10. Utilisation tsearch2 • Installer un module (tables, fonctions et types) dans la base qui nous intéresse. • Donner les permissions sur les nouvelles tables du superutilisateur. • Modifier le schéma de la base de données: Ajouter de nouvelles colonnes dans les tables contenant les champs concernés. • Remplir ces nouvelles colonnes a l’aide des fonctions tsearch2 • Développer des requêtes pour interroger la base avec le langage tsearch2 (fonctions). Réseau BD 11/12/08

  11. Installation module • Le superuser installe dans la database $PGHOME/share/contrib/tsearch2.sql • Donne les permissions sur les tables tsearch2 à l’utilisateur propriétaire de la database • pg_ts_cfg • pg_ts_cfgmap • pg_ts_dict • pg_ts_parser Réseau BD 11/12/08

  12. Modifier le schema • ALTER TABLE cvterm ADD COLUMN idxdefinition tsvector; • UPDATE cvterm SET idxdefinition=to_tsvector('default',definition); • VACUUM FULL ANALYZE; • CREATE INDEX idxdefinition_idx ON cvterm USING gist(idxdefinition); • VACUUM FULL ANALYZE; • CREATE TRIGGER tsvectorupdatecvterm BEFORE UPDATE OR INSERT ON cvterm FOR EACH ROW EXECUTE PROCEDURE tsearch2(idxdefinition, definition); Réseau BD 11/12/08

  13. Types, fonctions et opérateurs • select * from cvterm where idxdefinition @@ to_tsquery('default',‘kinase'); • Select to_tsvector('Presentation of Postgres') as lexemes; • lexemes • ------------------------ • 'postgr':3 'present':1 Réseau BD 11/12/08

  14. Requêtes • select count(*) from cvterm where idxdefinition @@ to_tsquery('default',‘similarity'); 114 • Filter: (idxdefinition @@ '''similar'''::tsquery) • select count(*) from cvterm where idxdefinition @@ to_tsquery('default',‘similar'); 114 • Filter: (idxdefinition @@ '''similar'''::tsquery) • select count(*) from cvterm where definition like '%similar%'; 114 • Filter: (definition ~~ '%similar%'::text) • select count(*) from cvterm where definition like ; '%similarity%'; 7 • Filter: (definition ~~ '%similarity%'::text) Réseau BD 11/12/08

  15. Requêtes • select count(*) from cvterm where idxdefinition @@ 'kinas'::tsquery; 161 • Filter: (idxdefinition @@ '''kinas'''::tsquery) • select count(*) from cvterm where idxdefinition @@ to_tsquery('default','kinase'); 161 • Filter: (idxdefinition @@ '''kinas'''::tsquery) • select count(*) from cvterm where definition like '%kinase%'; 170 • Filter: (definition ~~ '%kinase%'::text) • select count(*) from cvterm where idxdefinition @@ 'phosphokinas'::tsquery; 3 • Filter: (idxdefinition @@ '''phosphokinas'''::tsquery) Réseau BD 11/12/08

  16. Performances • select * from cvterm where definition like '%kinase%'; • Time: 81.661 ms 170 rows sur 21829 • select * from cvterm where idxdefinition @@ 'kinas'::tsquery; • Time: 17.919 ms 161 rows sur 21829 • Table testée en prod: featureprop , 2932584 lignes dont 1833285 indexées par tsearch2 (C. Pommier) • 8006,802 ms => 415,942 ms • Avec jointure featureprop join feature using (feature_id) • 9840,845 ms => 435,731 ms Réseau BD 11/12/08

  17. Intérêt tsearch2 • Augmentation des performances • Insuffisance des expressions rationnelles car • elles ne peuvent pasgérer facilement les mots dérivés, par exemple satisfait et satisfaire. • La recherche sur satisfaire ne ramène pas satisfait • Fournir un classement (score) des résultats de la recherche • Etablir une correspondance entre différentes variations d'un mot et une forme canonique • Faire une liste de synonymes Réseau BD 11/12/08

  18. Inconvénients • Modification du schéma • Requêtes non “SQL ANSI compliant“ • Difficultés si on veut générer les requêtes à partir d’outils du type hibernate. • SGBD spécifique Réseau BD 11/12/08

  19. Questions ? Réseau BD 11/12/08

  20. Architecture n-tiers et URGI Outils URGI Struts Spring AndroMDA Hibernate search Hibernate Lucene Diag. UML Oracle Magic Draw PostgreSQL Réseau BD 11/12/08

More Related