Vous n'êtes pas identifié(e).

#1 29/03/2019 12:38:21

rheman
Membre

Postgresql prefix wildcard for full text search

Bonjour, J'aimerais savoir comment faire une prefix wildcard sur une  full text search.

- Par exemple je peux faire un postfix search.

SELECT "t1".*
FROM "t1"
WHERE (to_tsvector('simple', "t1"."city") @@ to_tsquery('simple', 'don:*') )

Cette requete devrait renvoyer des résultats correspondant à "London".

Cependant, je ne peux faire une recherche avec préfixe comme par exemple:

SELECT "t1".*
FROM "t1"
WHERE (to_tsvector('simple', "t1"."city") @@ to_tsquery('simple', ':*don') )

En fait, j'aimerais avoir un caractère générique préfixé au début et à la fin du terme de recherche, quelque chose comme suit:

SELECT "t1".*
FROM "t1"
WHERE (to_tsvector('simple', "t1"."city") @@ to_tsquery('simple', ':*don:*') )

Je peux utiliser une clause LIKE, mais j'espérais bénéficier des performances des fonctionnalités du full text search de postgresql

Cordialement,

Hors ligne

#2 29/03/2019 15:54:23

dverite
Membre

Re : Postgresql prefix wildcard for full text search

to_tsquery  ne permet pas de faire ça,  mais l'extension pg_trgm le permet.

On fait un index GIN ou GIST sur la colonne et il est utilisé automatiquement  par une clause LIKE colonne '%foo%' ou ILIKE colonne '%foo%'. Accessoirement pg_trgm permet aussi de reconnaître des termes saisis de manière approximative.


https://www.postgresql.org/docs/current/pgtrgm.html

Dernière modification par dverite (29/03/2019 15:54:41)

Hors ligne

#3 30/03/2019 10:03:56

rheman
Membre

Re : Postgresql prefix wildcard for full text search

Merci pour ta réponse. Je vais essayer d'utiliser cette extension.

Hors ligne

Pied de page des forums