🐘 PostgreSQL Intermediate

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.