La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

A L I M E N T A T I O N A G R I C U L T U R E E N V I R O N N E M E N T Réseau BD 11/12/08 Fonctionnalités et limites d’outils d’indexation et de recherche.

Présentations similaires


Présentation au sujet: "A L I M E N T A T I O N A G R I C U L T U R E E N V I R O N N E M E N T Réseau BD 11/12/08 Fonctionnalités et limites d’outils d’indexation et de recherche."— Transcription de la présentation:

1 A L I M E N T A T I O N A G R I C U L T U R E E N V I R O N N E M E N T Réseau BD 11/12/08 Fonctionnalités et limites d’outils d’indexation et de recherche "full text" Tsearch2 (PostgreSQL)

2 I.Luyten Réseau BD 11/12/082 C’est quoi Tsearch2 ?

3 I.Luyten Réseau BD 11/12/083 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)

4 I.Luyten 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/084

5 I.Luyten 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/085

6 I.Luyten Réseau BD 11/12/086 Tsearch2 utilisé à l’URGI

7 I.Luyten Réseau BD 11/12/087 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.

8 I.Luyten 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/088

9 I.Luyten Exemple: que fait tsearch2 ? Definition:  The breakdown into simpler components 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/089

10 I.Luyten 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/0810

11 I.Luyten 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/0811

12 I.Luyten Réseau BD 11/12/0812 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);

13 I.Luyten Réseau BD 11/12/0813 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

14 I.Luyten 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/0814

15 I.Luyten 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/0815

16 I.Luyten Performances select * from cvterm where definition like '%kinase%';  Time: 81.661 ms170 rows sur 21829 select * from cvterm where idxdefinition @@ 'kinas'::tsquery;  Time: 17.919 ms161 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/0816

17 I.Luyten Intérêt tsearch2 Augmentation des performances Insuffisance des expressions rationnelles car  elles ne peuvent pas gé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/0817

18 I.Luyten 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/0818

19 I.Luyten Réseau BD 11/12/0819 Questions ?

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


Télécharger ppt "A L I M E N T A T I O N A G R I C U L T U R E E N V I R O N N E M E N T Réseau BD 11/12/08 Fonctionnalités et limites d’outils d’indexation et de recherche."

Présentations similaires


Annonces Google