PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment créer une recherche floue simple avec PostgreSQL uniquement ?

Postgres fournit un module avec plusieurs fonctions de comparaison de chaînes telles que soundex et metaphone. Mais vous voudrez utiliser la fonction de distance d'édition levenshtein.

Example:

test=# SELECT levenshtein('GUMBO', 'GAMBOL');
 levenshtein
-------------
           2
(1 row)

Le 2 est la distance d'édition entre les deux mots. Lorsque vous appliquez cela à un certain nombre de mots et que vous triez en fonction du résultat de la distance d'édition, vous obtenez le type de correspondances approximatives que vous recherchez.

Essayez cet exemple de requête :(avec vos propres noms d'objet et données bien sûr)

SELECT * 
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10

Cette requête indique :

Donnez-moi les 10 meilleurs résultats de toutes les données de some_table où la distance d'édition entre la valeur du code et l'entrée 'AB123-lHdfj' est inférieure à 3. Vous récupérerez toutes les lignes où la valeur du code est à moins de 3 caractères de différence avec ' AB123-lHdfj'...

Remarque :si vous obtenez une erreur telle que :

function levenshtein(character varying, unknown) does not exist

Installez le fuzzystrmatch extension utilisant :

test=# CREATE EXTENSION fuzzystrmatch;