Le mercredi 27 décembre 2006 par Nicolas DAMIENS

Mise en place de la recherche full text sur postgresSQL


Tsearch2 permet d’indexer un champ pour par la suite y faire une recherche fulltext.

Cette article est une méthode pour l’installer sur postgresql 8.1 pour une distribution debian (etch)

PostgreSql doit déjà être installé, tsearch2 se trouve dans le paquet postgresql-contrib-8.1.

Donc :

# apt-get install postgresql-contrib-8.1
# su - postgres
postgres$ cd /usr/share/postgresql/8.1/contrib
postgres$ psql labase < tsearch2.sql

Il faut aussi autoriser votre utilisateur a lire la configuration de tsearch2

postgres$ psql labase
Bienvenue dans psql 8.1.5, l'interface interactive de PostgreSQL.
labase=# grant select on pg_ts_cfg to www;
labase=# grant select on pg_ts_cfgmap to www;
labase=# grant select on pg_ts_dict to www;
labase=# grant select on pg_ts_parser to www;

Si ce n’est pas fait on va permettre l’utilisation de plpgsql.

labase=# create language plpgsql;
labase=# grant usage on language plpgsql to www;

Pour vérifier, on va créer une table ts_test, le mieux est de recopier le code qui suit dans un fichier et de l’éxécuter comme celà : psql labase < ts_test.sql

create table ts_test (
       texte   varchar(100) not null,
       ts_idx  tsvector
);

create or replace function trig_ts_test() returns trigger as $trig$
begin
       new.ts_idx := to_tsvector('default', new.texte);
       return new;
end;

$trig$ LANGUAGE plpgsql;

create trigger ts_test_before before insert or update on ts_test
  for each row execute procedure trig_ts_test();

On peut essayer :

Par défaut tsearch2 utilise un dictionnaire anglais, on va maintenant configurer pour utiliser un dictionnaire français. (marche pas) On va installer ce qu’il nous manque :

# apt-get install ifrench-gut wfrench

En tant qu’utilisateur postgres il faut exécuter la requête :

insert into pg_ts_dict (
 select
     'fr_ispell',
     dict_init,
     'DictFile="/usr/share/dict/french",'
     'AffFile="/usr/lib/ispell/french.aff",'
     'StopFile="/usr/local/share/pgsql/french.stop"',
     dict_lexize
 from
     pg_ts_dict
 where
     dict_name='ispell_template'
);

select set_curdict('fr_ispell');

update pg_ts_cfgmap set dict_name='{fr_ispell}'
  where ts_name='default' and tok_alias='lword';

update pg_ts_cfgmap set dict_name='{fr_ispell}'
  where ts_name='default' and tok_alias='lpart_hword';

update pg_ts_cfgmap set dict_name='{fr_ispell}'
  where ts_name='default' and tok_alias='lhword';

Répondre à cet article

Les fortunes de #epplug. Retrouvez les membres de notre association sur notre salon IRC: irc.geeknode.net #epplug
Voici quelques extraits amusants (Télécharger le fichier de fortune)

Association Picarde des Utilisateurs de Logiciels Libres (EPPLUG) ­ Association régie par la loi 1901
137, avenue du général FOY 80000 AMIENS.
Parution au Journal Officiel le 21/06/03 sous le n° 20030025 ­ Siren : 494 525 280

© epplug.org 2002-2005 - ce site fonctionne grace au moteur d'edition collaboratif SPIP fonctionnant sous license GPL

ADMIN

Toutes les interventions sur ce site sont la propriété de leurs auteurs respectifs.