投稿全体からキーワードを検索

このクエリを使用すると、すべての投稿でキーワードを効率的に検索できます。これは、Postgres の 全文検索 構造化データを使用するため、posts.raw LIKE クエリよりもはるかに高速です。

-- [params]
-- string :query

SELECT p.id as post_id FROM posts p
LEFT JOIN post_search_data psd ON psd.post_id = p.id
WHERE psd.search_data @@ TO_TSQUERY(:query)
「いいね!」 19

素晴らしいコードスニペットに欠けているのは、ランクで検索する機能です。

-- [params]
-- string :query

SELECT p.id as post_id,
       ts_rank(psd.search_data, to_tsquery('english', :query)) AS rank
FROM posts p
LEFT JOIN post_search_data psd ON psd.post_id = p.id
WHERE psd.search_data @@ TO_TSQUERY(:query)
ORDER BY rank DESC
「いいね!」 1