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 Re : Général » ts_headline et les accents » 05/02/2013 20:20:41

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!

#2 Général » ts_headline et les accents » 05/02/2013 18:41:49

Ahaus
Réponses : 1

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!

#3 Général » Text Search et dictionnaire » 31/01/2013 19:26:18

Ahaus
Réponses : 0

Bonjour,

Je dois faire une recherche dans de long texte et le Text Search de PostgreSQL est parfaite pour gagner en vitesse vis à vis du LIKE % dans une table de plusieurs milliers d'enregistrements.

Mais voilà, je dois aussi rechercher des noms d'application. J'ai tenté d'indexer les noms de la même façon, mais en vain (je ne vais pas critiquer le dictionnaire de base, il est parfait pour les textes wink). Par exemple, j'aimerais avoir un dictionnaire spécifiquement pour les noms d'application. Si une personne recherche Word, la base pourrait être Word, j'aurais alors également l'application WordQ.

Je sais que c'est le fonctionnement d'un LIKE % mais je ne veux pas intégrer des LIKE en plus de la TS car cela rendrait la génération de la requête plus complexe du au fait de générer les différentes clauses du LIKE (dans des colonnes différentes, nom anglais et français oblige).

Alors je me demandais s'il existait un dictionnaire déjà fait pour cette utilisation. J'ai fait quelques recherches pour en trouver, mais en vain. S'il en existe pas à votre connaissance, existe-t-il une page contenant une liste des dictionnaires disponibles et si je dois en créer un, quelle façon me proposeriez-vous ?

N'hésitez-pas si vous avez besoin de plus d'information.

Merci d'avance pour votre aide!

Pied de page des forums

Propulsé par FluxBB