Commit 0f9731a34c27afb7222d8d28374923d21c6925d1

Authored by Rodrigo Souto
1 parent 3ebea73a

[search-improvements] Not calculate search_term score before save

app/models/search_term.rb
@@ -15,8 +15,6 @@ class SearchTerm < ActiveRecord::Base @@ -15,8 +15,6 @@ class SearchTerm < ActiveRecord::Base
15 context.search_terms.where(:term => term, :asset => asset).first || context.search_terms.create!(:term => term, :asset=> asset) 15 context.search_terms.where(:term => term, :asset => asset).first || context.search_terms.create!(:term => term, :asset=> asset)
16 end 16 end
17 17
18 - before_save :calculate_score  
19 -  
20 def calculate_score 18 def calculate_score
21 valid_occurrences = occurrences.valid 19 valid_occurrences = occurrences.valid
22 if valid_occurrences.present? 20 if valid_occurrences.present?
@@ -30,5 +28,6 @@ class SearchTerm < ActiveRecord::Base @@ -30,5 +28,6 @@ class SearchTerm < ActiveRecord::Base
30 else 28 else
31 self.score = 0 29 self.score = 0
32 end 30 end
  31 + self.save!
33 end 32 end
34 end 33 end
test/unit/search_term_test.rb
@@ -48,24 +48,26 @@ class SearchTermTest < ActiveSupport::TestCase @@ -48,24 +48,26 @@ class SearchTermTest < ActiveSupport::TestCase
48 48
49 should 'calculate score' do 49 should 'calculate score' do
50 search_term = SearchTerm.find_or_create('universe', Environment.default) 50 search_term = SearchTerm.find_or_create('universe', Environment.default)
51 - occurrence = SearchTermOccurrence.create!(:search_term => search_term, :total => 10, :indexed => 3)  
52 - search_term.save! 51 + SearchTermOccurrence.create!(:search_term => search_term, :total => 10, :indexed => 3)
  52 + # Search term must happens at least two times to be considered
  53 + SearchTermOccurrence.create!(:search_term => search_term, :total => 10, :indexed => 3)
  54 + search_term.calculate_score
53 assert search_term.score > 0, "Score was not calculated." 55 assert search_term.score > 0, "Score was not calculated."
54 end 56 end
55 57
56 should 'not consider expired occurrences to calculate the score' do 58 should 'not consider expired occurrences to calculate the score' do
57 search_term = SearchTerm.find_or_create('universe', Environment.default) 59 search_term = SearchTerm.find_or_create('universe', Environment.default)
58 occurrence = SearchTermOccurrence.create!(:search_term => search_term, :total => 10, :indexed => 3, :created_at => DateTime.now - (SearchTermOccurrence::EXPIRATION_TIME + 1.day)) 60 occurrence = SearchTermOccurrence.create!(:search_term => search_term, :total => 10, :indexed => 3, :created_at => DateTime.now - (SearchTermOccurrence::EXPIRATION_TIME + 1.day))
59 - search_term.save! 61 + search_term.calculate_score
60 assert search_term.score == 0, "Considered expired occurrence to calculate the score." 62 assert search_term.score == 0, "Considered expired occurrence to calculate the score."
61 end 63 end
62 64
63 should 'calculate search_terms scores' do 65 should 'calculate search_terms scores' do
64 - st1 = SearchTerm.create!(:term => 'st1') 66 + st1 = SearchTerm.find_or_create('st1', Environment.default)
65 SearchTermOccurrence.create!(:search_term => st1, :total => 10, :indexed => 3) 67 SearchTermOccurrence.create!(:search_term => st1, :total => 10, :indexed => 3)
66 SearchTermOccurrence.create!(:search_term => st1, :total => 20, :indexed => 8) 68 SearchTermOccurrence.create!(:search_term => st1, :total => 20, :indexed => 8)
67 SearchTermOccurrence.create!(:search_term => st1, :total => 30, :indexed => 9) 69 SearchTermOccurrence.create!(:search_term => st1, :total => 30, :indexed => 9)
68 - st2 = SearchTerm.create!(:term => 'st2') 70 + st2 = SearchTerm.find_or_create('st2', Environment.default)
69 SearchTermOccurrence.create!(:search_term => st2, :total => 10, :indexed => 7) 71 SearchTermOccurrence.create!(:search_term => st2, :total => 10, :indexed => 7)
70 SearchTermOccurrence.create!(:search_term => st2, :total => 20, :indexed => 16) 72 SearchTermOccurrence.create!(:search_term => st2, :total => 20, :indexed => 16)
71 SearchTermOccurrence.create!(:search_term => st2, :total => 30, :indexed => 21) 73 SearchTermOccurrence.create!(:search_term => st2, :total => 30, :indexed => 21)