Я разрабатываю postgreSQL-запрос, чтобы использовать возможности нечеткого поиска при поиске имени компании в приложении, над которым я работаю. Я нашел и работал с методом Postgres «Levenshtein» (часть модуля fuzzystrmatch) и по большей части работает. Однако, похоже, это работает только тогда, когда имя компании является одним словом, например:PostgreSQL Fuzzy Поиск нескольких слов с Levenshtein
С Apple (который хранится в базе данных как простое яблоко) я могу запустить следующий запрос и заставить его работать идеально (он возвращает Левенштейна 0):
SELECT * FROM contents
WHERE levenshtein(company_name, 'apple') < 4;
Однако, когда я беру тот же подход, с Sony (который хранится в базе данных как Sony Electronics INC) Я не могу получить какие-либо полезные результаты (ввод Sony дает расстояние Левенштейна из 16).
Я попытался решить эту проблему, разбивая название компании на отдельные слова и ввод каждого из них по отдельности, в результате чего-то вроде этого:
user input => 'sony'
SELECT * FROM contents
WHERE levenshtein('Sony', 'sony') < 4
OR levenshtein('Electronics', 'sony') < 4
OR levenshtein('INC', 'sony') < 4;
Так что мой вопрос заключается в следующем: есть ли какой-то способ, что Я могу точно реализовать многословный нечеткий поиск с текущим общим подходом, который у меня есть сейчас, или я смотрю в совершенно неправильное место?
Спасибо!