ElasticSearchX-Model
view release on metacpan or search on metacpan
lib/ElasticSearchX/Model/Bulk.pm view on Meta::CPAN
#
# This file is part of ElasticSearchX-Model
#
# This software is Copyright (c) 2019 by Moritz Onken.
#
# This is free software, licensed under:
#
# The (three-clause) BSD License
#
package ElasticSearchX::Model::Bulk;
$ElasticSearchX::Model::Bulk::VERSION = '2.0.1';
use Moose;
use ElasticSearchX::Model::Document::Types qw(ESBulk);
has stash => (
is => 'ro',
isa => ESBulk,
handles => { stash_size => '_buffer_count', commit => "flush" },
lazy_build => 1,
);
has size => ( is => 'ro', isa => 'Int', default => 100 );
has es => ( is => 'ro' );
sub _build_stash {
my $self = shift;
$self->es->bulk_helper( max_count => $self->size );
}
sub add {
my ( $self, $action, $payload ) = ( shift, %{ $_[0] } );
$payload->{source} = delete $payload->{body};
$self->stash->add_action( $action => $payload );
}
sub update {
my ( $self, $doc, $qs ) = @_;
$self->add(
{
index => ref $doc eq 'HASH'
? $doc
: { $doc->_put( $doc->_update($qs) ) }
}
);
return $self;
}
sub create {
my ( $self, $doc, $qs ) = @_;
$self->add(
{ create => ref $doc eq 'HASH' ? $doc : { $doc->_put($qs) } } );
return $self;
}
sub put {
my ( $self, $doc, $qs ) = @_;
$self->add(
{
index => ref $doc eq 'HASH'
? $doc
: { $doc->_put, %{ $qs || {} } }
}
);
return $self;
}
sub delete {
my ( $self, $doc, $qs ) = @_;
$self->add(
{
delete => ref $doc eq 'HASH'
? $doc
: {
index => $doc->index->name,
type => $doc->meta->short_name,
id => $doc->_id,
}
}
);
return $self;
}
sub clear {
my $self = shift;
$self->stash->clear_buffer;
return $self;
}
sub DEMOLISH {
my ($self, $in_gd) = @_;
return if $in_gd;
$self->commit if $self->has_stash;
}
1;
( run in 0.589 second using v1.01-cache-2.11-cpan-d7f47b0818f )