Fonctionnalits et limites doutils dindexation et de recherche "full text" - PowerPoint PPT Presentation

1 / 20
About This Presentation
Title:

Fonctionnalits et limites doutils dindexation et de recherche "full text"

Description:

Fonctionnalit s et limites d'outils d'indexation et de recherche 'full text' ... sch ma de la base de donn es: Ajouter de nouvelles colonnes dans les tables ... – PowerPoint PPT presentation

Number of Views:34
Avg rating:3.0/5.0
Slides: 21
Provided by: sophie78
Category:

less

Transcript and Presenter's Notes

Title: Fonctionnalits et limites doutils dindexation et de recherche "full text"


1
Fonctionnalités et limites doutils dindexation
et de recherche "full text"
  • Tsearch2 (PostgreSQL)

2
Cest quoi Tsearch2 ?
3
Cest 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-V
    2-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.p
    df
  • Utilisé généralement sur des champs texte en
    langage naturel (ex titres de films)

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 dunité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 deux.

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) 

6
Tsearch2 utilisé à lURGI
7
Tsearch2 à lURGI
  • Utilisé en 2006
  • Avec la version 7.4 de PostgreSQL
  • Pour améliorer les performances (like nom
    nutilise pas dindex)
  • Sur des données dontologies (GO)
  • Avec un dictionnaire en anglais
  • Abandonné car cela ne correspondait pas à nos
    besoins .

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

9
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

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 laide des
    fonctions tsearch2
  • Développer des requêtes pour interroger la base
    avec le langage tsearch2 (fonctions).

11
Installation module
  • Le superuser installe dans la database
    PGHOME/share/contrib/tsearch2.sql
  • Donne les permissions sur les tables tsearch2 à
    lutilisateur propriétaire de la database
  • pg_ts_cfg
  • pg_ts_cfgmap
  • pg_ts_dict
  • pg_ts_parser

12
Modifier le schema
  • ALTER TABLE cvterm ADD COLUMN idxdefinition
    tsvector
  • UPDATE cvterm SET idxdefinitionto_tsvector('defau
    lt',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(idxdefinit
    ion, definition)

13
Types, fonctions et opérateurs
  • select from cvterm where idxdefinition _at__at_
    to_tsquery('default',kinase')
  • Select to_tsvector('Presentation of Postgres') as
    lexemes
  • lexemes
  • ------------------------
  • 'postgr'3 'present'1

14
Requêtes
  • select count() from cvterm where idxdefinition
    _at__at_ to_tsquery('default',similarity') 114
  • Filter (idxdefinition _at__at_ '''similar'''tsquery)
  • select count() from cvterm where idxdefinition
    _at__at_ to_tsquery('default',similar') 114
  • Filter (idxdefinition _at__at_ '''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)

15
Requêtes
  • select count() from cvterm where idxdefinition
    _at__at_ 'kinas'tsquery 161
  • Filter (idxdefinition _at__at_ '''kinas'''tsquery)
  • select count() from cvterm where idxdefinition
    _at__at_ to_tsquery('default','kinase') 161
  • Filter (idxdefinition _at__at_ '''kinas'''tsquery)
  • select count() from cvterm where definition like
    'kinase' 170
  • Filter (definition 'kinase'text)
  • select count() from cvterm where idxdefinition
    _at__at_ 'phosphokinas'tsquery 3
  • Filter (idxdefinition _at__at_ '''phosphokinas'''tsqu
    ery)

16
Performances
  • select from cvterm where definition like
    'kinase'
  • Time 81.661 ms 170 rows sur 21829
  • select from cvterm where idxdefinition _at__at_
    '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 gt 415,942 ms
  • Avec jointure featureprop join feature using
    (feature_id)
  • 9840,845 ms gt 435,731 ms

17
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

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 doutils du type hibernate.
  • SGBD spécifique

19
Questions ?
20
Architecture n-tiers et URGI
Outils URGI
Struts
Spring
AndroMDA
Hibernate search
Hibernate
Lucene
Diag. UML
Oracle
Magic Draw
PostgreSQL
Write a Comment
User Comments (0)
About PowerShow.com