class Solr::Query::Request::Boosting::DictionaryBoostFunction
Attributes
default_boost[R]
dictionary[R]
field[R]
Public Class Methods
new(field:, dictionary:, default_boost: 1)
click to toggle source
# File lib/solr/query/request/boosting/dictionary_boost_function.rb, line 10 def initialize(field:, dictionary:, default_boost: 1) raise 'dictionary must be a non-empty Hash' if Hash(dictionary).empty? @field = field @dictionary = dictionary @default_boost = default_boost end
Public Instance Methods
to_solr_s()
click to toggle source
example: given a hash (dictionary) {3025 => 2.0, 3024 => 1.5, 3023 => 1.2} and a field of category_id the resulting boosting function will be: if(eq(category_id_it, 3025), 2.0, if(eq(category_id_it, 3024), 1.5, if(eq(category_id_it, 3023), 1.2, 1))) note that I added spaces for readability, real Solr
query functions must always be w/out spaces
# File lib/solr/query/request/boosting/dictionary_boost_function.rb, line 23 def to_solr_s sf = solarize_field(field) dictionary.to_a.reverse.reduce(default_boost) do |acc, (field_value, boost)| if field_value.is_a?(String) || field_value.is_a?(Symbol) "if(termfreq(#{sf},\"#{field_value.to_s.solr_escape}\"),#{boost},#{acc})" else "if(eq(#{sf},#{field_value}),#{boost},#{acc})" end end end