class Tagliani::Search::Index

Public Class Methods

bulk!(name: nil, queue: nil, length: nil) click to toggle source
# File lib/tagliani/search/index.rb, line 82
def bulk!(name: nil, queue: nil, length: nil)
  new(name: name, queue: queue, length: length).bulk!
end
create!(name: nil, schema: nil) click to toggle source
# File lib/tagliani/search/index.rb, line 67
def create!(name: nil, schema: nil)
  new(name: name, schema: schema).create!
end
delete!(name: nil) click to toggle source
# File lib/tagliani/search/index.rb, line 71
def delete!(name: nil)
  new(name: name).delete!
end
move!(from:, to:) click to toggle source
# File lib/tagliani/search/index.rb, line 75
def move!(from:, to:)
  create!(name: to)
  Tagliani::Search.client.reindex({
    body: { source: { index: from }, dest: { index: to } }
  })
end
new(name: nil, schema: nil, queue: nil, length: nil) click to toggle source
# File lib/tagliani/search/index.rb, line 6
def initialize(name: nil, schema: nil, queue: nil, length: nil)
  @name = name || Tagliani.config.elasticsearch.index
  @schema = schema || Tagliani.config.schema.default
  @queue = queue || Tagliani.config.redis.queue
  @length = length || Tagliani.config.redis.length
  @search = Tagliani::Search.new(body: {})
end

Public Instance Methods

add!(schema, async: false) click to toggle source
# File lib/tagliani/search/index.rb, line 50
def add!(schema, async: false)
  object = Object.new(schema)

  if async
    Tagliani.redis.sadd(@queue, object.to_json)
  else
    @search.client.index({
      index: @name,
      type: "doc",
      id: object.id,
      body: object.to_h,
      refresh: true
    })
  end
end
bulk!() click to toggle source
# File lib/tagliani/search/index.rb, line 41
def bulk!
  indices = Tagliani.redis.spop(@queue, @length)
  data = parse_data(indices, index_name: @name)
  
  return false if data.empty?

  @search.client.bulk(body: data)
end
create!() click to toggle source
# File lib/tagliani/search/index.rb, line 14
def create!
  @search.client.indices.create index: @name, body: @schema
end
delete!() click to toggle source
# File lib/tagliani/search/index.rb, line 18
def delete!
  @search.client.indices.delete index: @name, ignore: 404
end
parse_data(indices, index_name:) click to toggle source
# File lib/tagliani/search/index.rb, line 26
def parse_data(indices, index_name:)
  [indices].flatten.flat_map do |text|
    object = Object.new(text)

    {
      index: {
        _index: index_name,
        _id: object.id,
        _type: "doc",
        data: object.to_h
      }
    }
  end
end
refresh() click to toggle source
# File lib/tagliani/search/index.rb, line 22
def refresh
  @search.client.indices.refresh
end