tvl-depot/migrations/2018-04-14-170750_search-index/up.sql
Vincent Ambo 2d8db52010 feat(migrations): Add materialized view & index for full text search
Adds a materialized view to be used for full-text searches that
indexes the tsvector documents for each post.
2018-04-14 22:21:55 +02:00

21 lines
803 B
SQL

-- Prepare a materialised view containing the tsvector data for all
-- threads and posts. This view is indexed using a GIN-index to enable
-- performant full-text searches.
--
-- For now the query language is hardcoded to be English.
CREATE MATERIALIZED VIEW search_index AS
SELECT p.id AS post_id,
p.author_name AS author,
t.id AS thread_id,
t.title AS title,
p.body AS body,
setweight(to_tsvector('english', t.title), 'A') ||
setweight(to_tsvector('english', p.body), 'B') ||
setweight(to_tsvector('simple', t.author_name), 'C') ||
setweight(to_tsvector('simple', p.author_name), 'C') AS document
FROM posts p
JOIN threads t
ON t.id = p.thread_id;
CREATE INDEX idx_fts_search ON search_index USING gin(document);