Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
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
Pages : 1