Add searching by all tags using postgres full-text search.

This commit is contained in:
Jakub Macina 2017-05-31 16:36:15 +02:00
parent 6d1fafaff6
commit 3eebcccbf2

View File

@ -445,15 +445,28 @@ class Search
end
end
advanced_filter(/tags?:([a-zA-Z0-9,\-_]+)/) do |posts, match|
tags = match.split(",")
advanced_filter(/tags?:([a-zA-Z0-9,\-_|]+)/) do |posts, match|
if match.include?(',')
tags = match.split(",")
posts.where("topics.id IN (
# TODO use ts_query function
posts.where("topics.id IN (
SELECT DISTINCT(tt.topic_id)
FROM topic_tags tt, tags
WHERE tt.tag_id = tags.id
GROUP BY tt.topic_id
HAVING to_tsvector('simple',array_to_string(array_agg(tags.name), ' ')) @@ to_tsquery('simple', ?)
)", tags.join('&'))
else
tags = match.split("|")
posts.where("topics.id IN (
SELECT DISTINCT(tt.topic_id)
FROM topic_tags tt, tags
WHERE tt.tag_id = tags.id
AND tags.name in (?)
)", tags)
end
end
private