Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parHelewise Rault Modifié depuis plus de 9 années
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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.