Sha256: f045bc973cd6e93f606aea6966a9c25a6061efbac149b843cb62caa247a95cd6

Contents?: true

Size: 980 Bytes

Versions: 1

Compression:

Stored size: 980 Bytes

Contents

module Elastic::Nodes
  class Match < Base
    include Concerns::Boostable

    MATCH_MODES = [:boolean, :phrase, :phrase_prefix]

    attr_accessor :field, :query
    attr_reader :mode

    def query=(_query)
      raise ArgumentError, 'query must be a string' unless _query.is_a? String
      @query = _query
    end

    def mode=(_value)
      _value = _value.try(:to_sym)
      raise ArgumentError, 'invalid match mode' if !_value.nil? && !MATCH_MODES.include?(_value)
      @mode = _value
    end

    def clone
      prepare_clone(super)
    end

    def simplify
      prepare_clone(super)
    end

    def render
      query_options = { 'query' => @query }
      query_options['type'] = @mode.to_s unless @mode.nil? || @mode == :boolean

      { "match" => { @field.to_s => render_boost(query_options) } }
    end

    private

    def prepare_clone(_clone)
      _clone.field = @field
      _clone.query = @query
      _clone.mode = @mode
      _clone
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
elastic-rails-0.5.0 lib/elastic/nodes/match.rb