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 )