Суть в том что в строке запроса может быть аббревиатура, или что то лишнее.
Из примера ниже видно, что запись не найдет.
Пример:
create table banks(
id serial,
name text
);
insert into banks(name) values('Тиньков'),('Сбербанк'),('Альфа Банк');
select * from banks where name ilike '%ПАО СБЕРБАНК%';
По всем ответам - согласен. Добавлю. В данной постановке точный поиск вообще не работает. Но работает fuzzy - поиск с использованием триграмм. Триграммы - это тройки букв которые должны максимально близко совпасть у шаблона и искомой строки. Чем их больше - тем выше similarity. Похожесть типа.
Вобщем делайте поиск где SIMILARITY > 0.5 или какой-то любой величины. И выводите пользователю строки-кандидаты в порядке ранга похожести. И пускай он сам выбирает.
Видимый выход - парсить запрос на токены, запрашивать по каждому токену, отбирать записи с хотя бы одним вхождением, сортировать по количеству вхождений (или, например, по суммарной длине найденных токенов).