PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie erstellt man eine einfache Fuzzy-Suche nur mit PostgreSQL?

Postgres bietet ein Modul mit mehreren String-Vergleichsfunktionen wie Soundex und Metaphone. Aber Sie werden die Entfernungsbearbeitungsfunktion von Levenshtein verwenden wollen.

Example:

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

Die 2 ist der Bearbeitungsabstand zwischen den beiden Wörtern. Wenn Sie dies auf eine Reihe von Wörtern anwenden und nach dem Ergebnis der Bearbeitungsentfernung sortieren, erhalten Sie die Art von Fuzzy-Matches, nach der Sie suchen.

Probieren Sie dieses Abfragebeispiel aus:(natürlich mit Ihren eigenen Objektnamen und Daten)

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

Diese Abfrage lautet:

Geben Sie mir die Top-10-Ergebnisse aller Daten aus some_table, wobei der Bearbeitungsabstand zwischen dem Codewert und der Eingabe „AB123-lHdfj“ kleiner als 3 ist. Sie erhalten alle Zeilen zurück, in denen der Wert des Codes innerhalb von 3 Zeichen Unterschied zu „ AB123-lHdfj'...

Hinweis:Wenn Sie eine Fehlermeldung erhalten wie:

function levenshtein(character varying, unknown) does not exist

Installieren Sie fuzzystrmatch Erweiterung mit:

test=# CREATE EXTENSION fuzzystrmatch;