Sha256: 0045172e862a4bff9d2bd7ba1a8e67e00c975305d3f42a81bef0402070948fd9

Contents?: true

Size: 999 Bytes

Versions: 5

Compression:

Stored size: 999 Bytes

Contents

class Suggester
  attr_reader :response

  def initialize(params={})
    @term = params[:term]
  end

  def response
    @response ||= begin
      Elasticsearch::Persistence.client.suggest \
      index: Artist.index_name,
      body: {
        artists: {
          text: @term,
          completion: { field: 'suggest_name' }
        },
        members: {
          text: @term,
          completion: { field: 'suggest_member' }
        },
        albums: {
          text: @term,
          completion: { field: 'suggest_title' }
        },
        tracks: {
          text: @term,
          completion: { field: 'suggest_track' }
        }
      }
    end
  end

  def as_json(options={})
    response
      .except('_shards')
      .reduce([]) do |sum,d|
        # category = { d.first => d.second.first['options'] }
        item = { :label => d.first.titleize, :value => d.second.first['options'] }
        sum << item
      end
      .reject do |d|
        d[:value].empty?
      end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
elasticsearch-persistence-queryable-0.1.9 examples/music/suggester.rb
elasticsearch-persistence-queryable-0.1.8 examples/music/suggester.rb
elasticsearch-persistence-0.1.6 examples/music/suggester.rb
elasticsearch-persistence-0.1.5 examples/music/suggester.rb
elasticsearch-persistence-0.1.4 examples/music/suggester.rb