search: add comment_count, note_count metatags (#4004).
Add these metatags: * comment_count * deleted_comment_count * active_comment_count * note_count * deleted_note_count * active_note_count * order:comment_count * order:deleted_comment_count * order:active_comment_count * order:note_count * order:deleted_note_count * order:active_note_count
This commit is contained in:
@@ -1609,6 +1609,33 @@ class Post < ApplicationRecord
|
||||
joins("CROSS JOIN unnest(string_to_array(tag_string, ' ')) AS tag")
|
||||
end
|
||||
|
||||
def with_comment_stats
|
||||
relation = left_outer_joins(:comments).group(:id).select("posts.*")
|
||||
relation = relation.select("COUNT(comments.id) AS comment_count")
|
||||
relation = relation.select("COUNT(comments.id) FILTER (WHERE comments.is_deleted = TRUE) AS deleted_comment_count")
|
||||
relation = relation.select("COUNT(comments.id) FILTER (WHERE comments.is_deleted = FALSE) AS active_comment_count")
|
||||
relation
|
||||
end
|
||||
|
||||
def with_note_stats
|
||||
relation = left_outer_joins(:notes).group(:id).select("posts.*")
|
||||
relation = relation.select("COUNT(notes.id) AS note_count")
|
||||
relation = relation.select("COUNT(notes.id) FILTER (WHERE notes.is_active = TRUE) AS active_note_count")
|
||||
relation = relation.select("COUNT(notes.id) FILTER (WHERE notes.is_active = FALSE) AS deleted_note_count")
|
||||
relation
|
||||
end
|
||||
|
||||
def with_stats(tables)
|
||||
return all if tables.empty?
|
||||
|
||||
relation = all
|
||||
tables.each do |table|
|
||||
relation = relation.send("with_#{table}_stats")
|
||||
end
|
||||
|
||||
from(relation.arel.as("posts"))
|
||||
end
|
||||
|
||||
def pending
|
||||
where(is_pending: true)
|
||||
end
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
class Tag < ApplicationRecord
|
||||
COSINE_SIMILARITY_RELATED_TAG_THRESHOLD = 300
|
||||
COUNT_METATAGS = %w[
|
||||
comment_count deleted_comment_count active_comment_count
|
||||
note_count deleted_note_count active_note_count
|
||||
]
|
||||
METATAGS = %w[
|
||||
-user user -approver approver commenter comm noter noteupdater artcomm
|
||||
-pool pool ordpool -favgroup favgroup -fav fav ordfav md5 -rating rating
|
||||
@@ -7,7 +11,7 @@ class Tag < ApplicationRecord
|
||||
-source id -id date age order limit -status status tagcount parent -parent
|
||||
child pixiv_id pixiv search upvote downvote filetype -filetype flagger
|
||||
-flagger appealer -appealer disapproval -disapproval
|
||||
] + TagCategory.short_name_list.map {|x| "#{x}tags"}
|
||||
] + TagCategory.short_name_list.map {|x| "#{x}tags"} + COUNT_METATAGS
|
||||
|
||||
SUBQUERY_METATAGS = %w[commenter comm noter noteupdater artcomm flagger -flagger appealer -appealer]
|
||||
|
||||
@@ -790,6 +794,9 @@ class Tag < ApplicationRecord
|
||||
q[:downvote] = User.name_to_id(g2)
|
||||
end
|
||||
|
||||
when *COUNT_METATAGS
|
||||
q[g1.to_sym] = parse_helper(g2)
|
||||
|
||||
end
|
||||
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user