Sha256: 03c8abad873f0ebb93a64cbd7519d002fd75a2a3501f92556e76cfe5220c4cda
Contents?: true
Size: 1.36 KB
Versions: 1
Compression:
Stored size: 1.36 KB
Contents
require 'bigdecimal' module DynamicSunspotSearch module Translator module BoostRecency # Boost by recency: https://wiki.apache.org/solr/FunctionQuery#Date_Boosting def self.apply(query_object, options) return unless options.present? query_object.tap do |search| Array.wrap(options).each do |recency_boost| apply_recency_boost(query_object, recency_boost) end end end def self.apply_recency_boost(query_object, recency_boost) return unless recency_boost.present? field = recency_boost.delete(:field) half_life = recency_boost.delete(:half_life) query_object.tap do |search| search.adjust_solr_params do |sunspot_params| sunspot_params[:defType] = 'edismax' sunspot_params[:boost] = build_boost_string(field, half_life) end end end def self.build_boost_string(field, half_life) half_life_ms = calculate_half_life_ms(half_life) half_life_recip = BigDecimal((1.0/(half_life_ms)).to_s).to_s('E').downcase "recip(ms(NOW,#{field.to_s}_dt),#{half_life_recip},100,1)" end def self.calculate_half_life_ms(options) options.reduce(0) do |half_life_ms, (period, value)| half_life_ms += value.to_f.send(period.to_sym).to_i*1000 end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dynamic_sunspot_search-0.1.3 | lib/dynamic_sunspot_search/translator/boost_recency.rb |