Skip to main content

full_text_search_tsvector

🗣️ Full-Text Search with Custom Dictionaries and Rankings

Implement full-text search by adding a tsvector column and indexing it with a GIN index. Use custom text search configurations or dictionaries for multilingual support. Combine ts_rank and plainto_tsquery (or websearch_to_tsquery) for relevance-ranked search results.

ALTER TABLE articles ADD COLUMN search_vector tsvector;
UPDATE articles
SET search_vector = to_tsvector('english', coalesce(title, '') || ' ' || coalesce(body, ''));
CREATE INDEX idx_articles_search ON articles USING GIN(search_vector);

-- Query with ranking
SELECT id, title, ts_rank(search_vector, q) AS rank
FROM articles, to_tsquery('english', 'postgres & performance') q
WHERE search_vector @@ q
ORDER BY rank DESC;