Postgres udostępnia moduł z kilkoma funkcjami porównywania strun, takimi jak soundex i metafon. Ale będziesz chciał użyć funkcji edycji odległości levenshtein.
Example:
test=# SELECT levenshtein('GUMBO', 'GAMBOL');
levenshtein
-------------
2
(1 row)
2
to odległość edycji między dwoma słowami. Kiedy zastosujesz to do kilku słów i posortujesz według wyniku odległości edycji, uzyskasz typ rozmytych dopasowań, których szukasz.
Wypróbuj ten przykład zapytania:(oczywiście z własnymi nazwami obiektów i danymi)
SELECT *
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10
To zapytanie mówi:
Podaj mi 10 najlepszych wyników wszystkich danych z some_table, w których odległość edycji między wartością kodu a wejściem 'AB123-lHdfj' jest mniejsza niż 3. Otrzymasz wszystkie wiersze, w których wartość kodu mieści się w zakresie 3 znaków różnicy do ' AB123-lHdfj'...
Uwaga:jeśli pojawi się błąd taki jak:
function levenshtein(character varying, unknown) does not exist
Zainstaluj fuzzystrmatch
rozszerzenie za pomocą:
test=# CREATE EXTENSION fuzzystrmatch;