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 06/02/2010 21:41:26

sweet-r
Membre

Base de données postgresql(requetes)

Bonjour,

J'aimerai avoir des informations au sujet de la recherche FULL TEXT dans Postgresql.

Par exemple, lorsque je fait une recherche dans une table pour retrouver un texte qui contient les mots averti, avertis, avertissement, avertissant, si je fait une recherche avec 'averti' ou 'avertis' cela fonctionne, par contre uniquement pour ce deux mots par contre  si je fait une recherche avec 'averti' pour qu'il m'affiche tous les mots correspond par exemple avertis, avertissant, averti, avertissement  cela ne fonctionne pas !
A priori le lexeme d'averti s serait 'avert' et pour 'avertissement est 'avertiss'  (voir la commande SELECT * FROM ts_debug('french', 'averti')

Je ne sait pas si ce fonctionnement est normal, et si il existe un moyen pour contourner ce problème ?

Merci pour votre aide .

voici ma requete:

SELECT ts_headline(tb.translation,q,'StartSel={**}, StopSel={**}, HighlightAll=TRUE') as src_block,
            tb.source as dest_block, orig_text.id as orig_id,
            ts_rank_cd(to_tsvector(translation),q) AS rank, TRUE as reverse
            FROM texts AS src_text
            plainto_tsquery(?) q
            WHERE  to_tsvector(translation)@@ q

Dernière modification par sweet-r (06/02/2010 21:43:35)

Hors ligne

#2 07/02/2010 01:19:17

gleu
Administrateur

Re : Base de données postgresql(requetes)

Je ne sait pas si ce fonctionnement est normal, et si il existe un moyen pour contourner ce problème ?

Fonctionnement normal, oui, dans un sens. Ça dépend principalement du dictionnaire utilisé. Testez avec un autre dictionnaire (le stemmer par exemple).


Guillaume.

Hors ligne

#3 07/02/2010 03:05:15

sweet-r
Membre

Re : Base de données postgresql(requetes)

j'utilise ce dictionnaire ou bien dite moi comme puise je faire pour trouver  la racine du mot saisie dansles requetes protgresql et utilisatio de like avec to_tscector et to_tsquery,
par contre je n'arrive  pas à bien gere ces fonctions  c a d


select nom, prenom ts_headline(nom, T, sartsel={<b>},stopsel={<b>}, highlighAll=true),
from table
join tar as a on table.id=a.id
where to_tsvector(nom)@@ to_tsquery(T) in select nom from tar where nom like'R%')

Hors ligne

#4 07/02/2010 08:42:48

gleu
Administrateur

Re : Base de données postgresql(requetes)

j'utilise ce dictionnaire

Quel dictionnaire ? essayez d'être un peu plus précis.

La requête que vous proposez ne peut pas fonctionner, elle n'a aucun sens en SQL. Le résultat de l'opérateur @@ est un booléen.


Guillaume.

Hors ligne

#5 07/02/2010 11:34:05

sweet-r
Membre

Re : Base de données postgresql(requetes)

le dictionnaire que j'utilise est stemmer.
merci bcp mais je veux savoir comme faire pour afficher tous les documents par exemple afficher tous les documents dans le mot commencant par T dans postgresql.
j'ai sais que ce Like 'T%' mais il n'ya pas plus que ça .

Hors ligne

#6 07/02/2010 11:55:07

Marc Cousin
Membre

Re : Base de données postgresql(requetes)

Vous ne pouvez pas le faire avec le mode full text, il n'est pas à ma connaissance conçu pour celà (sauf à réécrire des règles supplémentaires, comme dans votre exemple, pour qu'avertissement soit aussi raccordé à averti, mais ça risque de représenter un gros travail, sans jamais être sûr d'avoir été exhaustif ).

Sinon, il faudra le faire avec like, ou l'opérateur d'expression régulière. Mais dans ce cas, il sera difficile d'utiliser des index, puisque je présume que vous ne rechercherez pas toujours à partir du début de la chaîne.


Marc.

Hors ligne

#7 07/02/2010 12:33:16

sweet-r
Membre

Re : Base de données postgresql(requetes)

ok
je voix donc là je dois cherche les similaires les mots par exemple  similaires à « excllente » on aura excllent, excllente, excllentement, par exemple.
si ce le cas donc je le remplace avec ts_rank_cd. parceque je travaille avec ts_rank_cd pour le score et le decoupage des mots .

Dernière modification par sweet-r (07/02/2010 12:36:47)

Hors ligne

#8 07/02/2010 22:35:13

gleu
Administrateur

Re : Base de données postgresql(requetes)

En fait, si, on peut utiliser Text Search. L'idée est de faire la recherche plein texte avec la recherche LIKE. Comme ça, le LIKE se fait seulement sur le sous-ensemble des lignes récupéré par la recherche plein texte.


Guillaume.

Hors ligne

#9 08/02/2010 01:38:24

sweet-r
Membre

Re : Base de données postgresql(requetes)

ok  merci bcp pour l'idée.
mais je me pose la question comment ce sous ensemble des lignes récupéré par par la recheche plein texte avec like.
par contre , je me dis peut être ce moi qui utilise mal la fonction LIKE.
selon ma requetes ou peut on placer cette fonction?
j'avais travaille avec LIKE il m'affiche tous les documments sans selectionne la racine.
ma requetes:

SELECT ts_headline(tb.translation,q,'StartSel={**}, StopSel={**}, HighlightAll=TRUE') as src_block,
            tb.source as dest_block, orig_text.id as orig_id,
            ts_rank_cd(to_tsvector(translation),q) AS rank, TRUE as reverse
            FROM texts AS src_text
            plainto_tsquery(?) q
            WHERE  tb.translation LIKE '%q%';
si je met un selon pourcentage il m'affiche Null coe resultat. avec les deux % j'ai le resultat de tous les documents mais il n'arrive pas à selectionner la racine du mot demande.
Vraiment aidez moi

Dernière modification par sweet-r (08/02/2010 01:38:40)

Hors ligne

Pied de page des forums