# File app/models/cached_methods.rb, line 27 def self.included(base) base.has_one :cached_key, :as => :cacheable, :dependent => :destroy base.after_save :save_cached_keys base.after_save :update_elasticsearch_related_server base.after_destroy :delete_from_elasticsearch_related_server end
# File app/models/cached_methods.rb, line 173 def recommendation_ratings_added_and_grouped_for(target) target_type = target.eql?('news') ? 'Document' : 'Order' RecommendationRating.find(:all, :conditions => {:source_id => self.id, :source_type => self.class.base_class.name, :target_type => target_type}, :select => "sum(rating) as rating, target_id, target_type, max(updated_at) as updated_at", :group => "target_id, target_type", :order => "rating, updated_at") end
# File app/models/cached_methods.rb, line 169 def recommendation_ratings_added_for(target) RecommendationRating.find(:first, :conditions => {:source_id => self.id, :source_type => self.class.base_class.name, :target_type => target.class.base_class.name, :target_id => target.id}, :select => "sum(rating) as rating") end
# File app/models/cached_methods.rb, line 34 def save_cached_keys if self.title_es.present? && self.title_es.tildes.strip_html.present? && self.body_es.present? && self.body_es.tildes.strip_html.present? tit = self.title_es.tildes.strip_html.gsub(/<\/?[^>+]*>/, "").gsub(/[\+\-\*\[\]\=\?]/,'').gsub(/[\r|\n\(\)\-\\"]/, " ").gsub(/([0-9]+)\.([0-9]+)/,'\1\2') bod = self.body_es.tildes.strip_html.gsub(/<\/?[^>+\+\-]*>/, "").gsub(/[\+\-\*\[\]\=\?]/,'').gsub(/[\r|\n\(\)\-\\"]/, " ").gsub(/([0-9]+)\.([0-9]+)/,'\1\2')[0, 5000] # Se aplica el algoritmo para cada una de las noticias y se guardan en formato json cached_keywords = self.cached_key || self.build_cached_key begin rk = RakeKeyword.new(bod) r = rk.keywords() rakeq = tit inir = r[0][1] r.each do |sk| if (sk[1] >= inir/3.5) && (rakeq.length < 250) rakeq = rakeq + " " + sk[0] end end rh = {} r.each {|k, v| rh[k]=v} rakeq_json = rh.to_json cached_keywords.rake_es = rakeq_json if cached_keywords.save logger.info "CachedKeys saved for #{self.class.name} #{self.id}" else logger.info "Error saving cachedKeys for #{self.class.name} #{self.id} #{self.errors.to_sentence}" end rescue => err logger.info "#{self.class.name} #{self.id} could not be processed: #{err}" end end end
# File app/models/cached_methods.rb, line 68 def text_with_selected_keywords cached_keywords = self.cached_key if cached_keywords.blank? || cached_keywords.new_record? || (self.is_a?(News) && (self.updated_at > cached_keywords.updated_at)) logger.info "Recalculamos las keywords de #{self.class} #{self.id}" self.save_cached_keys end text = self.title.tildes.strip_html.escape_for_elasticsearch.gsub(/<\/?[^>+]*>/, "").gsub(/[\+\-\*\[\]\=\?]/,'').gsub(/[\r|\n\(\)\-\\"]/, " ").gsub(/([0-9]+)\.([0-9]+)/,'\1\2').downcase cached_keys = self.cached_key if cached_keys && cached_keys.rake_es.present? keywords_with_rating = JSON.parse(cached_keys.rake_es).sort{|a,b| b[1] <=> a[1]} top_rating= keywords_with_rating[0][1] keywords_with_rating.each do |keyword, rating| if (rating >= top_rating/3.5) && text.length < 250 text << " #{keyword}" end end else text = "" end text.escape_for_elasticsearch end