Skip to content

Commit

Permalink
Ensure exact match is the first result in hashtag searches (mastodon#…
Browse files Browse the repository at this point in the history
  • Loading branch information
ClearlyClaire authored Dec 15, 2022
1 parent 7fbc17a commit bf1c7e2
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion app/services/tag_search_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,27 @@ def from_elasticsearch
definition = TagsIndex.query(query)
definition = definition.filter(filter) if @options[:exclude_unreviewed]

definition.limit(@limit).offset(@offset).objects.compact
ensure_exact_match(definition.limit(@limit).offset(@offset).objects.compact)
rescue Faraday::ConnectionFailed, Parslet::ParseFailed
nil
end

# Since the ElasticSearch Query doesn't guarantee the exact match will be the
# first result or that it will even be returned, patch the results accordingly
def ensure_exact_match(results)
return results unless @offset.nil? || @offset.zero?

normalized_query = Tag.normalize(@query)
exact_match = results.find { |tag| tag.name.downcase == normalized_query }
exact_match ||= Tag.find_normalized(normalized_query)
unless exact_match.nil?
results.delete(exact_match)
results = [exact_match] + results
end

results
end

def from_database
Tag.search_for(@query, @limit, @offset, @options)
end
Expand Down

0 comments on commit bf1c7e2

Please sign in to comment.