diff --git a/app/models/user_search.rb b/app/models/user_search.rb index 2c0a950d7f2..5c71057b34a 100644 --- a/app/models/user_search.rb +++ b/app/models/user_search.rb @@ -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 diff --git a/lib/search.rb b/lib/search.rb index 4c60c318fbf..91704cc7da4 100644 --- a/lib/search.rb +++ b/lib/search.rb @@ -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)