mirror of
https://github.com/discourse/discourse.git
synced 2025-03-20 20:30:23 +08:00
FIX: Better ordering of similar user search suggestions (#20142)
* FIX: Better ordering of similar user search suggestions
This commit is contained in:
parent
14cf8eacf1
commit
e4fd3d9850
@ -173,24 +173,19 @@ class UserSearch
|
||||
|
||||
return users.to_a if users.size >= @limit
|
||||
|
||||
if SiteSetting.user_search_similar_results
|
||||
# 6. similar usernames
|
||||
if @term.present?
|
||||
# 6. similar usernames / names
|
||||
if @term.present? && SiteSetting.user_search_similar_results
|
||||
if SiteSetting.enable_names?
|
||||
scoped_users
|
||||
.where("username_lower <-> ? < 1", @term)
|
||||
.order(["username_lower <-> ? ASC", @term])
|
||||
.where("username_lower <-> ? < 1 OR name <-> ? < 1", @term, @term)
|
||||
.order(["LEAST(username_lower <-> ?, name <-> ?) ASC", @term, @term])
|
||||
.limit(@limit - users.size)
|
||||
.pluck(:id)
|
||||
.each { |id| users << id }
|
||||
end
|
||||
|
||||
return users.to_a if users.size >= @limit
|
||||
|
||||
# 7. similar names
|
||||
if SiteSetting.enable_names? && @term.present?
|
||||
else
|
||||
scoped_users
|
||||
.where("name <-> ? < 1", @term)
|
||||
.order(["name <-> ? ASC", @term])
|
||||
.where("username_lower <-> ? < 1", @term)
|
||||
.order(["username_lower <-> ? ASC", @term])
|
||||
.limit(@limit - users.size)
|
||||
.pluck(:id)
|
||||
.each { |id| users << id }
|
||||
|
@ -274,6 +274,7 @@ RSpec.describe UserSearch do
|
||||
codinghorror = Fabricate(:user, username: "codinghorror", name: "Jeff Atwood")
|
||||
pfaffman = Fabricate(:user, username: "pfaffman")
|
||||
zogstrip = Fabricate(:user, username: "zogstrip", name: "Régis Hanol")
|
||||
roman = Fabricate(:user, username: "roman", name: "Roman Rizzi")
|
||||
|
||||
SiteSetting.user_search_similar_results = false
|
||||
expect(UserSearch.new("rafel").search).to be_blank
|
||||
@ -297,5 +298,13 @@ RSpec.describe UserSearch do
|
||||
expect(UserSearch.new("regis").search).to include(zogstrip)
|
||||
expect(UserSearch.new("reg").search).to include(zogstrip)
|
||||
end
|
||||
|
||||
it "orders the results by similarity" do
|
||||
zogstrip = Fabricate(:user, username: "zogstrip", name: "Régis Hanol")
|
||||
roman = Fabricate(:user, username: "roman", name: "Roman Rizzi")
|
||||
SiteSetting.user_search_similar_results = true
|
||||
|
||||
expect(UserSearch.new("regis").search.first).to eq(zogstrip)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user