Skip to content
Snippets Groups Projects
Unverified Commit 92de439c authored by Eugen Rochko's avatar Eugen Rochko Committed by GitHub
Browse files

Change hashtag search to only return results that have trended in the past (#11448)

* Change hashtag search to only return results that have trended in the past

A way to eliminate typos and other one-off "junk" results

* Fix excluding exact matches that don't have a score

* Fix tests
parent ff789a75
No related branches found
No related tags found
No related merge requests found
......@@ -76,9 +76,11 @@ class Tag < ApplicationRecord
end
def search_for(term, limit = 5, offset = 0)
pattern = sanitize_sql_like(normalize(term.strip)) + '%'
normalized_term = normalize(term.strip).mb_chars.downcase.to_s
pattern = sanitize_sql_like(normalized_term) + '%'
Tag.where(arel_table[:name].lower.matches(pattern.mb_chars.downcase.to_s))
Tag.where(arel_table[:name].lower.matches(pattern))
.where(arel_table[:score].gt(0).or(arel_table[:name].lower.eq(normalized_term)))
.order(Arel.sql('length(name) ASC, score DESC, name ASC'))
.limit(limit)
.offset(offset)
......
......@@ -136,8 +136,8 @@ RSpec.describe Tag, type: :model do
end
it 'finds the exact matching tag as the first item' do
similar_tag = Fabricate(:tag, name: "matchlater")
tag = Fabricate(:tag, name: "match")
similar_tag = Fabricate(:tag, name: "matchlater", score: 1)
tag = Fabricate(:tag, name: "match", score: 1)
results = Tag.search_for("match")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment