@lookingfor2

Как правильно сделать запрос с поиском текста?

Суть в том что в строке запроса может быть аббревиатура, или что то лишнее.
Из примера ниже видно, что запись не найдет.
Пример:
create table banks(
  id serial,
  name text
);

insert into banks(name) values('Тиньков'),('Сбербанк'),('Альфа Банк');
select * from banks where name ilike '%ПАО СБЕРБАНК%';

https://sqlize.online/s/F
  • Вопрос задан
  • 72 просмотра
Решения вопроса 2
mayton2019
@mayton2019
Bigdata Engineer
По всем ответам - согласен. Добавлю. В данной постановке точный поиск вообще не работает. Но работает fuzzy - поиск с использованием триграмм. Триграммы - это тройки букв которые должны максимально близко совпасть у шаблона и искомой строки. Чем их больше - тем выше similarity. Похожесть типа.

Вобщем делайте поиск где SIMILARITY > 0.5 или какой-то любой величины. И выводите пользователю строки-кандидаты в порядке ранга похожести. И пускай он сам выбирает.

Для скорости - стройте триграм-индекс. Вот тут для начала почитайте https://www.postgresql.org/docs/current/pgtrgm.html
Ответ написан
Комментировать
@Akina
Сетевой и системный админ, SQL-программист.
Видимый выход - парсить запрос на токены, запрашивать по каждому токену, отбирать записи с хотя бы одним вхождением, сортировать по количеству вхождений (или, например, по суммарной длине найденных токенов).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы