Ответ
Для полнотекстового поиска в PostgreSQL используется тип tsvector (хранит обработанный текст) и tsquery (хранит поисковый запрос).
Пример:
-- Создание таблицы с tsvector
CREATE TABLE docs (
id SERIAL PRIMARY KEY,
content TEXT,
content_tsv TSVECTOR
);
-- Заполнение и индексирование
INSERT INTO docs (content) VALUES ('PostgreSQL is a powerful database');
UPDATE docs SET content_tsv = to_tsvector(content) WHERE id = 1;
-- Поиск
SELECT * FROM docs WHERE content_tsv @@ to_tsquery('powerful & database');
Для ускорения можно добавить GIN-индекс:
CREATE INDEX idx_tsv ON docs USING GIN(content_tsv);