Postgres предоставя модул с няколко функции за сравнение на низове като soundex и metaphone. Но вие ще искате да използвате функцията за редактиране на разстоянието на левещайн.
Example:
test=# SELECT levenshtein('GUMBO', 'GAMBOL');
levenshtein
-------------
2
(1 row)
2
е разстоянието за редактиране между двете думи. Когато приложите това спрямо няколко думи и сортирате според резултата от разстоянието за редактиране, ще имате вида размити съвпадения, които търсите.
Опитайте тази примерна заявка:(със вашите собствени имена на обекти и данни, разбира се)
SELECT *
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10
Тази заявка казва:
Дайте ми първите 10 резултата от всички данни от some_table, където разстоянието за редактиране между стойността на кода и входа 'AB123-lHdfj' е по-малко от 3. Ще получите обратно всички редове, където стойността на кода е в рамките на 3 знака разлика до ' AB123-lHdfj'...
Забележка:ако получите грешка като:
function levenshtein(character varying, unknown) does not exist
Инсталирайте fuzzystrmatch
разширение с помощта на:
test=# CREATE EXTENSION fuzzystrmatch;