PERF: only use fulltext when searching for a user (I checked, it's enough)
This commit is contained in:
parent
abeac7f681
commit
7e255a151b
|
@ -39,8 +39,7 @@ class UserSearch
|
|||
query = Search.ts_query(@term, "simple")
|
||||
users = users.includes(:user_search_data)
|
||||
.references(:user_search_data)
|
||||
.where("username_lower LIKE :term_like OR user_search_data.search_data @@ #{query}",
|
||||
term: @term, term_like: @term_like)
|
||||
.where("user_search_data.search_data @@ #{query}")
|
||||
.order(User.sql_fragment("CASE WHEN username_lower LIKE ? THEN 0 ELSE 1 END ASC", @term_like))
|
||||
else
|
||||
users = users.where("username_lower LIKE :term_like", term_like: @term_like)
|
||||
|
@ -56,36 +55,35 @@ class UserSearch
|
|||
# 1. exact username matches
|
||||
if @term.present?
|
||||
scoped_users.where(username_lower: @term.downcase)
|
||||
.limit(@limit)
|
||||
.pluck(:id)
|
||||
.each{|id| users << id}
|
||||
.each { |id| users << id }
|
||||
|
||||
end
|
||||
|
||||
return users.to_a if users.length == @limit
|
||||
return users.to_a if users.length >= @limit
|
||||
|
||||
# 2. in topic
|
||||
if @topic_id
|
||||
filtered_by_term_users.where('users.id in (SELECT p.user_id FROM posts p WHERE topic_id = ?)', @topic_id)
|
||||
filtered_by_term_users.where('users.id IN (SELECT p.user_id FROM posts p WHERE topic_id = ?)', @topic_id)
|
||||
.order('last_seen_at DESC')
|
||||
.limit(@limit - users.length)
|
||||
.pluck(:id)
|
||||
.each{|id| users << id}
|
||||
.each { |id| users << id }
|
||||
end
|
||||
|
||||
return users.to_a if users.length == @limit
|
||||
return users.to_a if users.length >= @limit
|
||||
|
||||
# 3. global matches
|
||||
filtered_by_term_users.order('last_seen_at DESC')
|
||||
.limit(@limit - users.length)
|
||||
.pluck(:id)
|
||||
.each{|id| users << id}
|
||||
.each { |id| users << id }
|
||||
|
||||
users.to_a
|
||||
|
||||
end
|
||||
|
||||
def search
|
||||
|
||||
ids = search_ids
|
||||
return User.where("0=1") if ids.empty?
|
||||
|
||||
|
@ -93,7 +91,6 @@ class UserSearch
|
|||
FROM unnest('{#{ids.join(",")}}'::int[])
|
||||
) x on uid = users.id")
|
||||
.order("rn")
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -382,11 +382,12 @@ class Search
|
|||
return if SiteSetting.hide_user_profiles_from_public && !@guardian.user
|
||||
|
||||
users = User.includes(:user_search_data)
|
||||
.where("active = true AND user_search_data.search_data @@ #{ts_query("simple")}")
|
||||
.references(:user_search_data)
|
||||
.where("active = TRUE")
|
||||
.where("user_search_data.search_data @@ #{ts_query("simple")}")
|
||||
.order("CASE WHEN username_lower = '#{@original_term.downcase}' THEN 0 ELSE 1 END")
|
||||
.order("last_posted_at DESC")
|
||||
.limit(@limit)
|
||||
.references(:user_search_data)
|
||||
|
||||
users.each do |user|
|
||||
@results.add(user)
|
||||
|
|
Loading…
Reference in New Issue