Class: Stretchy::Queries::FunctionScoreQuery
- Defined in:
- lib/stretchy/queries/function_score_query.rb
Constant Summary collapse
- SCORE_MODES =
%w(multiply sum avg first max min)
- BOOST_MODES =
%w(multiply replace sum avg max min)
Constants included from Utils::Contract
Utils::Contract::ASSERTIONS, Utils::Contract::DECAY_FUNCTIONS, Utils::Contract::DISTANCE_FORMAT
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(options = {}) ⇒ FunctionScoreQuery
constructor
A new instance of FunctionScoreQuery.
- #to_search ⇒ Object
- #validate_query_or_filter ⇒ Object
Methods included from Utils::Contract
included, #require_one, #validate!
Constructor Details
#initialize(options = {}) ⇒ FunctionScoreQuery
Returns a new instance of FunctionScoreQuery.
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/stretchy/queries/function_score_query.rb', line 20 def initialize( = {}) @functions = Array([:functions]) @query = [:query] @filter = [:filter] self.class.attributes.map do |field| instance_variable_set("@#{field}", [field]) end validate! validate_query_or_filter end |
Class Method Details
.attributes ⇒ Object
32 33 34 |
# File 'lib/stretchy/queries/function_score_query.rb', line 32 def self.attributes [:boost, :max_boost, :score_mode, :boost_mode, :min_score] end |
Instance Method Details
#to_search ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/stretchy/queries/function_score_query.rb', line 42 def to_search json = {} json[:functions] = @functions.map(&:to_search) if @query json[:query] = @query.to_search elsif @filter json[:filter] = @filter.to_search else json[:query] = Stretchy::Queries::MatchAllQuery.new.to_search end self.class.attributes.reduce(json) do |body, field| ivar = instance_variable_get("@#{field}") body[field] = ivar if ivar body end { function_score: json } end |
#validate_query_or_filter ⇒ Object
36 37 38 39 40 |
# File 'lib/stretchy/queries/function_score_query.rb', line 36 def validate_query_or_filter if @query && @filter raise Stretchy::Errors::ContractError.new "Cannot have both query and filter -- combine using a FilteredQuery" end end |