diff options
author | Vincent Ambo <tazjin@gmail.com> | 2018-04-14T18·27+0200 |
---|---|---|
committer | Vincent Ambo <github@tazj.in> | 2018-04-14T20·21+0200 |
commit | 2d8db520107c25c5bc7d1ba861047fa9b7eaea5f (patch) | |
tree | 3fd6ab26754606921118bad7fec0d9b54d9ad1bb | |
parent | 529da884da2a208ad91aebf052522517a704c742 (diff) |
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.
-rw-r--r-- | migrations/2018-04-14-170750_search-index/down.sql | 2 | ||||
-rw-r--r-- | migrations/2018-04-14-170750_search-index/up.sql | 21 |
2 files changed, 23 insertions, 0 deletions
diff --git a/migrations/2018-04-14-170750_search-index/down.sql b/migrations/2018-04-14-170750_search-index/down.sql new file mode 100644 index 000000000000..c57e66290201 --- /dev/null +++ b/migrations/2018-04-14-170750_search-index/down.sql @@ -0,0 +1,2 @@ +DROP INDEX idx_fts_search; +DROP MATERIALIZED VIEW search_index; diff --git a/migrations/2018-04-14-170750_search-index/up.sql b/migrations/2018-04-14-170750_search-index/up.sql new file mode 100644 index 000000000000..ed997d3e041b --- /dev/null +++ b/migrations/2018-04-14-170750_search-index/up.sql @@ -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); |