Elastic-Model
view release on metacpan or search on metacpan
lib/Elastic/Model/Role/Index.pm view on Meta::CPAN
use namespace::autoclean;
#===================================
has 'name' => (
#===================================
is => 'ro',
isa => Str,
required => 1,
);
#===================================
has 'namespace' => (
#===================================
is => 'ro',
isa => 'Elastic::Model::Namespace',
handles => [ 'model', 'mappings' ]
);
no Moose::Role;
#===================================
sub index_config {
#===================================
my ( $self, %args ) = @_;
my %settings = %{ $args{settings} || {} };
my @types = @{ $args{types} || [] };
my $mappings = $self->mappings(@types);
my $meta = Class::MOP::class_of( $self->model );
if ( my $analysis = $meta->analysis_for_mappings($mappings) ) {
$settings{analysis} = $analysis;
}
return {
index => $self->name,
settings => \%settings,
mappings => $mappings
};
}
#===================================
sub delete { shift->_index_action( 'delete_index', @_ ) }
sub refresh { shift->_index_action( 'refresh_index', @_ ) }
sub open { shift->_index_action( 'open_index', @_ ) }
sub close { shift->_index_action( 'close_index', @_ ) }
sub exists { !!$_[0]->model->store->index_exists( index => $_[0]->name ) }
#===================================
#===================================
sub _index_action {
#===================================
my $self = shift;
my $action = shift;
my %args = @_;
$self->model->store->$action( %args, index => $self->name );
return $self;
}
#===================================
sub update_settings {
#===================================
my $self = shift;
$self->model->store->update_index_settings(
index => $self->name,
settings => {@_}
);
return $self;
}
#===================================
sub update_analyzers {
#===================================
my $self = shift;
my $params = $self->index_config(@_);
delete $params->{mappings};
$self->model->store->update_index_settings(%$params);
return $self;
}
#===================================
sub is_alias {
#===================================
my $self = shift;
my $name = $self->name;
my $indices = $self->model->store->get_aliases( index => $name );
return !!( %$indices && !$indices->{$name} );
}
#===================================
sub is_index {
#===================================
my $self = shift;
my $name = $self->name;
my $indices = $self->model->store->get_aliases( index => $name );
return !!$indices->{$name};
}
#===================================
sub update_mapping {
#===================================
my $self = shift;
my %args = ref $_[-1] eq 'HASH' ? %{ pop() } : ();
my $mappings = $self->mappings(@_);
my $store = $self->model->store;
my $name = $self->name;
for my $type ( keys %$mappings ) {
$store->put_mapping(
index => $name,
type => $type,
mapping => $mappings->{$type},
%args,
);
}
return $self;
}
#===================================
sub delete_mapping {
#===================================
my $self = shift;
my %args = ref $_[-1] eq 'HASH' ? %{ pop() } : ();
my $store = $self->model->store;
my $name = $self->name;
$store->delete_mapping( index => $name, type => $_, %args ) for @_;
return $self;
}
1;
=pod
=encoding UTF-8
=head1 NAME
Elastic::Model::Role::Index - Provides admin methods common to indices and aliases
=head1 VERSION
version 0.52
=head1 SYNOPSIS
$admin->close();
$admin->open();
$admin->delete();
$admin->refresh();
$admin->update_mapping(@types);
$admin->delete_mapping(@types);
$admin->update_analyzers();
$admin->update_settings(%settings);
$bool = $admin->is_alias;
$bool = $admin->is_index;
$bool = $admin->exists;
=head1 DESCRIPTION
( run in 0.598 second using v1.01-cache-2.11-cpan-d7f47b0818f )