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.
This commit is contained in:
parent
529da884da
commit
2d8db52010
2 changed files with 23 additions and 0 deletions
2
migrations/2018-04-14-170750_search-index/down.sql
Normal file
2
migrations/2018-04-14-170750_search-index/down.sql
Normal file
|
@ -0,0 +1,2 @@
|
|||
DROP INDEX idx_fts_search;
|
||||
DROP MATERIALIZED VIEW search_index;
|
21
migrations/2018-04-14-170750_search-index/up.sql
Normal file
21
migrations/2018-04-14-170750_search-index/up.sql
Normal file
|
@ -0,0 +1,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);
|
Loading…
Reference in a new issue