Sha256: 3b17adfe3b432104f5b55cf68c0538e99d03fe9ef3e4440672b7ce4184ff8884

Contents?: true

Size: 940 Bytes

Versions: 4

Compression:

Stored size: 940 Bytes

Contents

module Elastic::Nodes::Agg
  class Top < Elastic::Nodes::BaseAgg
    include Elastic::Nodes::Concerns::Sortable

    def self.build(_name, _field, _options = {})
      super(_name).tap do |node|
        node.field = _field
      end
    end

    attr_accessor :field

    def clone
      prepare_clone super
    end

    def simplify
      prepare_clone super
    end

    def render(_options = {})
      top_hit_config = { '_source' => { 'includes' => [@field.to_s] }, 'size' => 1 }
      top_hit_config['sort'] = render_sorts if registered_sorts.count > 0

      { 'top_hits' => top_hit_config }
    end

    def handle_result(_raw, _formatter)
      hit = _raw['hits']['hits'].first
      raw_value = hit ? hit['_source'][@field.to_s] : nil

      # TODO: apply formatter to value
      Elastic::Results::Metric.new raw_value
    end

    private

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

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
elastic-rails-1.0.4 lib/elastic/nodes/agg/top.rb
elastic-rails-1.0.3 lib/elastic/nodes/agg/top.rb
elastic-rails-1.0.2 lib/elastic/nodes/agg/top.rb
elastic-rails-1.0.1 lib/elastic/nodes/agg/top.rb