class Scalastic::PartitionsClient

Attributes

config[R]
es_client[R]

Public Class Methods

new(es_client, config = Config.default.dup) click to toggle source
# File lib/scalastic/partitions_client.rb, line 13
def initialize(es_client, config = Config.default.dup)
  raise(ArgumentError, 'ES client is nil') if es_client.nil?
  raise(ArgumentError, 'Config is nil') if config.nil?
  @es_client = es_client
  @config = config
end

Public Instance Methods

[](id) click to toggle source
# File lib/scalastic/partitions_client.rb, line 41
def [](id)
  Partition.new(es_client, config, id)
end
create(args = {}) click to toggle source
# File lib/scalastic/partitions_client.rb, line 20
def create(args = {})
  actions = [
    {add: EsActionsGenerator.new_search_alias(config, args)},
    {add: EsActionsGenerator.new_index_alias(config, args)},
  ]
  es_client.indices.update_aliases(body: {actions: actions})
  self[args[:id]]
end
delete(args = {}) click to toggle source
# File lib/scalastic/partitions_client.rb, line 29
def delete(args = {})
  id = args[:id].to_s
  raise(ArgumentError, 'Missing required argument :id') if id.nil? || id.empty?
  pairs = normalized(es_client.indices.get_aliases).map{|i, d| d['aliases'].keys.select{|a| config.get_partition_id(a) == id}.map{|a| [i, a]}}.flatten(1)
  unless pairs.any?
    #TODO: log a warning
    return
  end
  actions = pairs.map{|i, a| {remove: {index: i, alias: a}}}
  es_client.indices.update_aliases(body: {actions: actions})
end
each() { |partition| ... } click to toggle source
# File lib/scalastic/partitions_client.rb, line 45
def each(&_block)
  partition_ids.each{|pid| yield Partition.new(es_client, config, pid) if block_given?}
end
prepare_index(args) click to toggle source
# File lib/scalastic/partitions_client.rb, line 49
def prepare_index(args)
  index = args[:index] || raise(ArgumentError, 'Missing required argument :index')
  mapping = {properties: config.partition_selector_mapping}
  es_client.indices.put_mapping(index: index, type: '_default_', body: {'_default_' => mapping})
  es_client.indices.put_mapping(index: index, type: 'scalastic', body: {'scalastic' => mapping})
end

Private Instance Methods

partition_ids() click to toggle source
# File lib/scalastic/partitions_client.rb, line 58
def partition_ids
  aliases = normalized(es_client.indices.get_aliases)
  partition_ids = aliases.map{|_, data| data['aliases'].keys}.flatten.map{|a| config.get_partition_id(a)}.compact.uniq
end