@Artem0071
Безработный mr. Junior

Поиск средствами sql?

Нужно организовать поиск некоторой информации по базе.
Сейчас используется ilike для таких вещей. Но он просто ищет вхождения в строке и возвращает только те, в которых оно присутствует.

Узнал недавно о полнотекстовом поиске. Выглядит круто, отбрасывает окончания, ищет по предложениям, можно получить rank.

Но столкнулся с проблемой, что тут необходимо знать точное начало слова, иначе поиск перестает работать.

В общем, наблюдается странность:
-- TRUE
select to_tsvector('russian', 'съешь ещё этих мягких французских булок, да выпей чаю') @@ plainto_tsquery('russian', 'чай')

-- FALSE
select to_tsvector('russian', 'съешь ещё этих мягких французских булок, да выпей чаю') @@ plainto_tsquery('russian', 'булка')

-- FALSE
select to_tsvector('russian', 'съешь ещё этих мягких французских булок, да выпей чаю') @@ plainto_tsquery('russian', 'франц')


Как вообще лучше всего устроить поиск средствами самого постгреса (не пользуясь отдельными поисковыми системами подобных elasticSearch и др.)
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
plainto_tsquery('russian', 'франц*')

вообще изучи доки, откроются возможности
Ответ написан
@MaLuTkA_UA
Используйте триграммы, с помощью их можно сделать неточный поиск. Вот статья на хабре
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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