Add hashtag score for better sorting of autosuggestions (#11427)
* Add hashtag score for better sorting of autosuggestions * Do not use `~<~` operator with no text_pattern_ops index
This commit is contained in:
		
							parent
							
								
									b31b232edf
								
							
						
					
					
						commit
						648cdbc04a
					
				
					 5 changed files with 17 additions and 5 deletions
				
			
		|  | @ -153,9 +153,9 @@ const sortHashtagsByUse = (state, tags) => { | |||
|     if (usedA === usedB) { | ||||
|       return 0; | ||||
|     } else if (usedA && !usedB) { | ||||
|       return 1; | ||||
|     } else { | ||||
|       return -1; | ||||
|     } else { | ||||
|       return 1; | ||||
|     } | ||||
|   }); | ||||
| }; | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
| #  name       :string           default(""), not null | ||||
| #  created_at :datetime         not null | ||||
| #  updated_at :datetime         not null | ||||
| #  score      :integer | ||||
| # | ||||
| 
 | ||||
| class Tag < ApplicationRecord | ||||
|  | @ -78,7 +79,7 @@ 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 | ||||
|  |  | |||
|  | @ -48,12 +48,17 @@ class TrendingTags | |||
|         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) | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										5
									
								
								db/migrate/20190729185330_add_score_to_tags.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								db/migrate/20190729185330_add_score_to_tags.rb
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | |||
| class AddScoreToTags < ActiveRecord::Migration[5.2] | ||||
|   def change | ||||
|     add_column :tags, :score, :int | ||||
|   end | ||||
| end | ||||
|  | @ -10,7 +10,7 @@ | |||
| # | ||||
| # 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" | ||||
|  | @ -659,6 +659,7 @@ ActiveRecord::Schema.define(version: 2019_07_28_084117) do | |||
|     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 | ||||
| 
 | ||||
|  |  | |||
		Reference in a new issue