Нужно организовать поиск некоторой информации по базе.
Сейчас используется
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 и др.)