How do you use full-text search in PostgreSQL?
Answer
PostgreSQL has built-in full-text search (FTS). Key types: tsvector (preprocessed document), tsquery (search query). Convert text: to_tsvector('english', 'The quick brown fox'). Search: to_tsquery('english', 'quick & fox'). Match operator: @@: WHERE to_tsvector('english', content) @@ to_tsquery('english', 'postgres & database'). Add a generated column for efficiency: ALTER TABLE articles ADD COLUMN tsv TSVECTOR GENERATED ALWAYS AS (to_tsvector('english', title || ' ' || content)) STORED;. Index: CREATE INDEX ON articles USING GIN(tsv);. Ranking: ts_rank(tsv, query) and ts_rank_cd. Highlighting: ts_headline(content, query). For simple substring search, pg_trgm extension with trigram GIN indexes is another option.
Previous
What are the differences between a B-tree, GIN, GiST, and BRIN index?
Next
What are generated columns in PostgreSQL?