此查询将允许您高效地在所有帖子中搜索关键字。它将比 posts.raw LIKE 查询快得多,因为它使用了 postgres 全文搜索 结构化数据
-- [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)
此查询将允许您高效地在所有帖子中搜索关键字。它将比 posts.raw LIKE 查询快得多,因为它使用了 postgres 全文搜索 结构化数据
-- [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)
出色的代码片段中缺少的是按排名搜索的功能。
-- [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