if (usedA === usedB) {
return 0;
} else if (usedA && !usedB) {
- return 1;
- } else {
return -1;
+ } else {
+ return 1;
}
});
};
# name :string default(""), not null
# created_at :datetime not null
# updated_at :datetime not null
+# score :integer
#
class Tag < ApplicationRecord
pattern = sanitize_sql_like(normalize(term.strip)) + '%'
Tag.where(arel_table[:name].lower.matches(pattern.mb_chars.downcase.to_s))
- .order(:name)
+ .order(Arel.sql('length(name) ASC, score DESC, name ASC'))
.limit(limit)
.offset(offset)
end
redis.zrem(key, tag_id.to_s)
else
score = ((observed - expected)**2) / expected
- redis.zadd(key, score, tag_id.to_s)
+ added = redis.zadd(key, score, tag_id.to_s)
+ bump_tag_score!(tag_id) if added == 1
end
redis.expire(key, EXPIRE_TRENDS_AFTER)
end
+ def bump_tag_score!(tag_id)
+ Tag.where(id: tag_id).update_all('score = COALESCE(score, 0) + 1')
+ end
+
def disallowed_hashtags
return @disallowed_hashtags if defined?(@disallowed_hashtags)
--- /dev/null
+class AddScoreToTags < ActiveRecord::Migration[5.2]
+ def change
+ add_column :tags, :score, :int
+ end
+end
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2019_07_28_084117) do
+ActiveRecord::Schema.define(version: 2019_07_29_185330) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
t.string "name", default: "", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
+ t.integer "score"
t.index "lower((name)::text)", name: "index_tags_on_name_lower", unique: true
end