Optimize account search (#2421)

This commit is contained in:
178inaba 2017-04-25 11:44:43 +09:00 committed by Eugen
parent 87f7a3922c
commit 1b6e534850
2 changed files with 11 additions and 3 deletions

View file

@ -15,12 +15,12 @@ class AccountSearchService < BaseService
private private
def search_service_results def search_service_results
return [] if query_blank_or_hashtag? return [] if query_blank_or_hashtag? || limit < 1
if resolving_non_matching_remote_account? if resolving_non_matching_remote_account?
[FollowRemoteAccountService.new.call("#{query_username}@#{query_domain}")] [FollowRemoteAccountService.new.call("#{query_username}@#{query_domain}")]
else else
search_results_and_exact_match.compact.uniq search_results_and_exact_match.compact.uniq.slice(0, limit)
end end
end end
@ -29,7 +29,9 @@ class AccountSearchService < BaseService
end end
def search_results_and_exact_match def search_results_and_exact_match
[exact_match] + search_results.to_a exact = [exact_match]
return exact if !exact[0].nil? && limit == 1
exact + search_results.to_a
end end
def query_blank_or_hashtag? def query_blank_or_hashtag?

View file

@ -11,6 +11,12 @@ describe AccountSearchService do
it 'returns empty array for hashtag query' do it 'returns empty array for hashtag query' do
results = subject.call('#tag', 10) results = subject.call('#tag', 10)
expect(results).to eq []
end
it 'returns empty array for limit zero' do
Fabricate(:account, username: 'match')
results = subject.call('match', 0)
expect(results).to eq [] expect(results).to eq []
end end
end end