PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 13/10/2014 17:58:39

Lguille
Membre

Recherche plein texte : fonctionnement bizarre

Voici ce que j'ai créé sur ma base :

CREATE TEXT SEARCH DICTIONARY french_stem_nostop (
   TEMPLATE = snowball,
   language = 'french'
);
CREATE TEXT SEARCH CONFIGURATION french_nostop (
  PARSER = "default"
);
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR asciihword WITH unaccent,french_stem_nostop;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR asciiword WITH unaccent,french_stem_nostop;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR email WITH simple;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR file WITH simple;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR float WITH simple;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR host WITH simple;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR hword WITH unaccent,french_stem_nostop;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR hword_asciipart WITH unaccent,french_stem_nostop;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR hword_numpart WITH simple;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR hword_part WITH unaccent,french_stem_nostop;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR int WITH simple;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR numhword WITH simple;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR numword WITH simple;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR sfloat WITH simple;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR uint WITH simple;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR url WITH simple;
ALTER TEXT SEARCH CONFIGURATION french_nostop ADD MAPPING FOR url_path WITH simple;

Je n'ai donc plus de mots brulés (STOP WORDS), pourtant lorsque je recherche dans une table tout ce qui contient 'coulisse', la requête me ramène effectivement ce qui contient coulisse mais aussi couleur, .....

Pourquoi SELECT plainto_tsquery('french_nostop', 'coulisse') ne me ramène que coul ????

Comment puis-je paramétrer Postgres pour avoir un fonctionnement 'normal' (pour moi) ?

Merci d'avance


Laurent
Formation DBA2 ET DBA4 fin 2013

Hors ligne

#2 14/10/2014 00:24:38

gleu
Administrateur

Re : Recherche plein texte : fonctionnement bizarre

Quelle version de PostgreSQL utilisez-vous ? parce que, moi, avec votre test ci-dessus, j'obtiens rien, en dehors d'un message :

postgres=# SELECT plainto_tsquery('french_nostop', 'coulisse');
NOTICE:  text-search query contains only stop words or doesn't contain lexemes, ignored
plainto_tsquery
-----------------

(1 row)


Guillaume.

Hors ligne

#3 14/10/2014 13:02:35

Lguille
Membre

Re : Recherche plein texte : fonctionnement bizarre

Nous sommes en 9.2 .

Et voici ce que j'obtiens:
XN_DEV=# select plainto_tsquery('french_nostop','coulisse');
LOG:  durée : 4.153 ms, instruction : select plainto_tsquery('french_nostop','coulisse');
plainto_tsquery
-----------------
'coul'
(1 ligne)

Dernière modification par Lguille (14/10/2014 17:54:24)


Laurent
Formation DBA2 ET DBA4 fin 2013

Hors ligne

#4 14/10/2014 21:50:44

gleu
Administrateur

Re : Recherche plein texte : fonctionnement bizarre

Je ne sais pas ce qui s'est passé sur mon test d'hier mais j'ai le même résultat que vous. Pourquoi coulisse donne coul en français, aucune idée. En anglais, cela donne couliss, ce qui semble plus logique. Mais coul, j'avoue que je ne vois pas en quoi c'est la racine du mot.

Quant à savoir quoi faire pour avoir un fonctionnement normal, encore faudrait-il déjà définir ce que veut dire normal dans ce cas smile


Guillaume.

Hors ligne

#5 15/10/2014 09:54:35

Lguille
Membre

Re : Recherche plein texte : fonctionnement bizarre

Quand on cherche un peu plus avec d'autres mots on s'aperçoit que le 'e' en fin de mot aussi les pluriels sont également supprimés .....

XN_DEV=# select plainto_tsquery('french_nostop','brilles');
LOG:  durée : 0.272 ms, instruction : select plainto_tsquery('french_nostop','brilles');
plainto_tsquery
-----------------
'brill'
(1 ligne)


Je pense qu'il y a d'autres règles orthographiques liées au langage mais tout ceci est-il stocké dans un fichier et si oui est-ce paramétrable ?
les 'isse' ou les 'asse' disparaissent comme si postgres déterminait qu'il s'agit de la terminaison d'un verbe conjugué...

Moi, je m'attendais à trouver 'couli' ou 'coulis' ....

Dernière modification par Lguille (15/10/2014 09:54:58)


Laurent
Formation DBA2 ET DBA4 fin 2013

Hors ligne

#6 15/10/2014 19:49:28

gleu
Administrateur

Re : Recherche plein texte : fonctionnement bizarre

coulisse est une conjugaison de coulisser, donc je ne le vois pas réduire à grand chose, sauf peut-être couliss comme en anglais.

Pour brilles, transformé en brill, ça me paraît assez logique comme racine. "tu brilles", "il brilla", "briller", etc, la racine commune est bien "brill".

Quant aux règles, vous utilisez le dictionnaire snowball. Ce qui nous amène à http://www.postgresql.org/docs/current/ … DICTIONARY, et du coup à http://snowball.tartarus.org/ .


Guillaume.

Hors ligne

Pied de page des forums