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