package Elastic::Model::0_90::Store; $Elastic::Model::0_90::Store::VERSION = '0.52'; use Moose; with 'Elastic::Model::Role::Store'; use namespace::autoclean; my @Top_Level = qw( index type lenient preference routing scroll search_type timeout version ); #=================================== sub search { #=================================== my $self = shift; my $args = _tidy_search( $self, @_ ); $self->es->search($args); } #=================================== sub scrolled_search { #=================================== my $self = shift; my $args = _tidy_search( $self, @_ ); $self->es->scroll_helper($args); } #=================================== sub _tidy_search { #=================================== my $self = shift; my %body = ref $_[0] eq 'HASH' ? %{ shift() } : @_; my %args; for (@Top_Level) { my $val = delete $body{$_}; if ( defined $val ) { $args{$_} = $val; } } if ( $self->es->isa('Search::Elasticsearch::Client::0_90::Direct') ) { if ( delete $body{_source} ) { push @{ $body{fields} }, '_source' unless grep { $_ eq '_source' } @{ $body{fields} }; } } $args{body} = \%body; return \%args; } #=================================== sub delete_by_query { #=================================== my $self = shift; my $args = _tidy_search( $self, @_ ); $args->{body} = $args->{body}{query}; my $result = eval { $self->es->delete_by_query($args) }; return $result if $result; die $@ unless $@ =~ /request does not support/; $args->{body} = { query => $args->{body} }; $self->es->delete_by_query($args); } #=================================== sub get_doc { #=================================== my ( $self, $uid, %args ) = @_; return $self->es->get( fields => [qw(_routing _parent _source)], %{ $uid->read_params }, %args, ); } #=================================== sub get_mapping { #=================================== my $self = shift; my %args = _cleanup(@_); my $result = $self->es->indices->get_mapping(%args); for ( keys %$result ) { next unless $result->{$_}; return $result if $result->{$_}{mappings}; $result->{$_} = { mappings => $result->{$_} }; } return $result; } #=================================== sub put_mapping { #=================================== my ( $self, %args ) = @_; $args{body} = { $args{type} => delete $args{mapping} }; return $self->es->indices->put_mapping(%args); } 1; =pod =encoding UTF-8 =head1 NAME Elastic::Model::0_90::Store - A 0.90.x compatibility class for Elastic::Model::Store =head1 VERSION version 0.52 =head1 DESCRIPTION L handles differences between Elasticsearch 0.90.x and 1.x, specifically to do with partial fields, get and put mapping responses, and delete-by-query. See L for more information about enabling the 0.90.x compatibility mode. =head1 AUTHOR Clinton Gormley =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2015 by Clinton Gormley. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut __END__ # ABSTRACT: A 0.90.x compatibility class for Elastic::Model::Store