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;
person
Paul Sasik
schedule
11.10.2011