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 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

Pied de page des forums