LINUX.ORG.RU

Простой FuzzySearch средствами Postgresql


0

1

Господа разработчики, нужна помощь в решении проблемы, краткой описанной в subj.

Есть база, предположим товаров. У товара есть, например, код. Какая-то совершенно произвольная строка, типа «ABC-12-567D». В ПО есть поиск. Как обычно бывает, пользователь чаще всего не знает код точно. Очень хочется сконструировать запрос, который находил бы коды, похожие на поисковый запрос хотя бы с одной-двумя «опечатками», т.е. находил бы продукт, если просят «ABC12567D» или «AB-C125-67D».

В данный момент ищу так:

SELECT * FROM products WHERE code ILIKE '%' + params[:search] + '%';

Такой запрос ищет только если введён правильный кусок кода, без учёта регистра. От опечаток не спасает.

P.S. Сам вижу два варианта: 1. Функции fuzzystrmatch (http://www.postgresql.org/docs/8.3/static/fuzzystrmatch.html), но как ими пользоваться не пойму и локально у меня такие функции не выполняются, сервер говорит «нет такой функции», хотя все пакеты установлены.

★★★★★
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.