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