Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 05/02/2013 18:41:49
- Ahaus
- Membre
ts_headline et les accents
Bonjour,
J'ai actuellement un problème avec la fonction ts_headline. J'essai de mettre en évidence des mots avec catactères accentués, mais sans succès.
Initialement, dans mon champ texte, j'ai bien entendu du texte, mais également des caractères encodés en html (é à etc). Lorsque je veux faire une comparaison, cette dernière ne fonctionne pas.
La base de données est encodé en UTF8.
Exemple:
Prenons pour acquis que mon mot passé en paramètre est: méthode (avec l'accent)
Le mot dans le titre français contient méthode
Voici le code
SELECT ts_headline(replace_htmlentitycode_with_accent(a.strTitleFr), q) AS strTitleFr
FROM FROM to_tsquery('pg_catalog.french', $1) AS q
article AS a
...
La fonction replace_htmlentitycode_with_accent(text) ne fait que des replaces des codes par leurs équivalents accentués (je ne peux pas installer de modules additionnels, notre environnement est très controlé et faire une demande prendrait trop de temps... donc j'ai fait ma propre fonction)
J'ai testé ceci:
SELECT replace_htmlentitycode_with_accent('méthode')
et j'obtiens : méthode
Ensuite
SELECT to_tsquery('pg_catalog.french', replace_htmlentitycode_with_accent('méthode'))
et j'obtiens : 'méthod' de type tsquery ce qui est le bon lexème.
Alors pour moi, méthode = méthode et avec la fonction to_tsquery, la fonction ts_headline devrait trouver la concordance.
Cependant, la fonction ts_headline ne le voit pas sous cet angle et ne me surligne pas les mots accentués. Les autres sont correctement reconnus.
Je me pose donc quelques questions:
Est-ce que c'est un problème d'encodage, le é dans les deux cas n'est pas encodé de la même façon, c'est donc différent pour ts_headline ?
Est-ce que ma méthode replace_htmlentitycode_with_accent pourrait retourner le bon encodage le cas echéant ?
Est-ce que l'exécution de la requête est fait dans un tout autre ordre rendant la conversion après l'exécution de la requête ?
Merci de votre aide!
Dernière modification par Ahaus (05/02/2013 19:09:15)
Hors ligne
#2 05/02/2013 20:20:41
- Ahaus
- Membre
Re : ts_headline et les accents
Finalement j'ai trouvé (je n'avais pas le cerveau trop réveillé...), c'est à cause de la configuration par défaut de PostgreSQL. Voici la solutions pour ceux qui en aurait besoin.
Il fallait juste que j'indique le dictionnaire pour forcer la reconnaissance, donc:
SELECT ts_headline(replace_htmlentitycode_with_accent(a.strTitleFr), q) AS strTitleFr
FROM FROM to_tsquery('pg_catalog.french', $1) AS q
article AS a
...
devient
SELECT ts_headline('pg_catalog.french', replace_htmlentitycode_with_accent(a.strTitleFr), q) AS strTitleFr
FROM FROM to_tsquery('pg_catalog.french', $1) AS q
article AS a
...
Merci!
Dernière modification par Ahaus (05/02/2013 21:18:10)
Hors ligne
Pages : 1