Mit dieser Abfrage können Sie effizient nach einem Schlüsselwort in allen Beiträgen suchen. Sie ist deutlich schneller als eine Abfrage mit posts.raw LIKE, da sie die strukturierten Daten der PostgreSQL Volltextsuche nutzt.
-- [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)
Was in dem fabelhaften Code-Snippet fehlt, ist die Möglichkeit, nach Rang zu suchen.
-- [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