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 )