diff options
| -rw-r--r-- | schema.sql | 48 | 
1 files changed, 48 insertions, 0 deletions
@@ -297,4 +297,52 @@ CREATE VIEW article_branch_tips AS      JOIN article_revisions USING (id); +-- You can customize the following depending on which languages you +-- support on your web site. + +CREATE INDEX article_revisions_german_ts_idx +    ON article_revisions + USING gin((setweight(to_tsvector('german', title), 'A') +           || setweight(to_tsvector('german', content), 'D'))); + +CREATE INDEX article_revisions_english_ts_idx +    ON article_revisions + USING gin((setweight(to_tsvector('english', title), 'A') +           || setweight(to_tsvector('english', content), 'D'))); + +CREATE INDEX article_revisions_french_ts_idx +    ON article_revisions + USING gin((setweight(to_tsvector('french', title), 'A') +           || setweight(to_tsvector('french', content), 'D'))); + +CREATE FUNCTION do_full_text_search(query       tsquery, +                                    language    regconfig, +                                    max_results INTEGER) +RETURNS SETOF record +AS $$ +  WITH headline_options AS ( +    SELECT 'StartSel=<strong>,StopSel=</strong>,FragmentDelimiter=" ... "'::varchar +             AS headline_options +  ), search AS ( +       SELECT revision, +              ts_rank((  setweight(to_tsvector($2, title),   'A') +                      || setweight(to_tsvector($2, content), 'D')), +                      $1, +                      1) +                AS rank, +              title, +              content +         FROM article_branch_tips +         JOIN article_revisions ON revision = id +        ORDER BY rank DESC +        LIMIT $3 +  ) +  SELECT rank, +         revision, +         ts_headline(content, $1, headline_options), +         ts_headline(title,   $1, headline_options) +    FROM search +   CROSS JOIN headline_options +$$ LANGUAGE SQL STABLE; +  COMMIT;  | 
