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;