about summary refs log tree commit diff
path: root/migrations/2018-04-14-170750_search-index/up.sql
blob: ed997d3e041b40ff8ddbbbde74f312cc2ebc6553 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- 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);