* 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
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)
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")