App-ElasticSearch-Utilities
view release on metacpan or search on metacpan
lib/App/ElasticSearch/Utilities.pm view on Meta::CPAN
# Handle Version incompatibilities
my $ref = exists $result->{$idx}{mappings} ? $result->{$idx}{mappings} : $result->{$idx};
# Loop through the mappings, skipping _default_, except on 7.x where we notice "properties"
my @mappings = exists $ref->{properties} ? ($ref)
: map { $ref->{$_} } grep { $_ ne '_default_' } keys %{ $ref };
foreach my $mapping (@mappings) {
_find_fields(\%fields,$mapping);
}
}
# Return the results
return \%fields;
}
{
# Closure for field metadata
my $nested_path;
sub _add_fields {
my ($f,$type,@path) = @_;
return unless @path;
my %i = (
type => $type,
);
# Store the full path
my $key = join('.', @path);
if( $nested_path ) {
$i{nested_path} = $nested_path;
$i{nested_key} = substr( $key, length($nested_path)+1 );
}
$f->{$key} = \%i;
}
sub _find_fields {
my ($f,$ref,@path) = @_;
return unless is_hashref($ref);
# Handle things with properties
if( exists $ref->{properties} && is_hashref($ref->{properties}) ) {
$nested_path = join('.', @path) if $ref->{type} and $ref->{type} eq 'nested';
foreach my $k (sort keys %{ $ref->{properties} }) {
_find_fields($f,$ref->{properties}{$k},@path,$k);
}
undef($nested_path);
}
# Handle elements that contain data
elsif( exists $ref->{type} ) {
_add_fields($f,$ref->{type},@path);
# Handle multifields
if( exists $ref->{fields} && is_hashref($ref->{fields}) ) {
foreach my $k (sort keys %{ $ref->{fields} } ) {
_add_fields($f,$ref->{type},@path,$k);
}
}
}
# Unknown data, throw an error if we care that deeply.
else {
debug({stderr=>1,color=>'red'},
sprintf "_find_fields(): Invalid property at: %s ref info: %s",
join('.', @path),
join(',', is_hashref($ref) ? sort keys %{$ref} :
ref $ref ? ref $ref : 'unknown ref'
),
);
}
}
}
sub es_close_index {
my($index) = @_;
return es_request('_close',{ method => 'POST', index => $index });
}
sub es_open_index {
my($index) = @_;
return es_request('_open',{ method => 'POST', index => $index });
}
sub es_delete_index {
my($index) = @_;
return es_request('',{ method => 'DELETE', index => $index });
}
sub es_optimize_index {
my($index) = @_;
return es_request('_forcemerge',{
method => 'POST',
index => $index,
uri_param => {
max_num_segments => 1,
},
});
}
sub es_apply_index_settings {
my($index,$settings) = @_;
if(!is_hashref($settings)) {
output({stderr=>1,color=>'red'}, 'usage is es_apply_index_settings($index,$settings_hashref)');
return;
}
return es_request('_settings',{ method => 'PUT', index => $index },$settings);
}
sub es_index_segments {
lib/App/ElasticSearch/Utilities.pm view on Meta::CPAN
=item B<:all> - All exportable functions
:config
:default
:index
:indices
:human
:maintenance
es_basic_auth()
es_flatten_hash()
es_local_index_meta()
es_master()
es_nodes()
es_node_stats()
es_pattern()
es_settings()
es_segment_stats()
=back
=head2 Configuration
It is possible to control how and when C<@ARGV> is processed to prevent conflicts.
=head1 CONFIG FUNCTIONS
=head2 es_utils_initialize()
Takes an optional reference to an C<@ARGV> like array. Performs environment and
argument parsing.
=head2 es_globals($key)
Grab the value of the global value from the es-utils.yaml files.
=head2 es_basic_auth($host)
Get the user/password combination for this host. This is called from LWP::UserAgent if
it recieves a 401, so the auth condition must be satisfied.
Returns the username and password as a list.
=head1 CONNECTION FUNCTIONS
=head2 es_connect
Without options, this connects to the server defined in the args. If passed
an array ref, it will use that as the connection definition.
=head2 es_request([$handle],$command,{ method => 'GET', uri_param => { a => 1 } }, {})
Retrieve URL from ElasticSearch, returns a hash reference
First hash ref contains options, including:
uri_param Query String Parameters
index Index name
type Index type
method Default is GET
If the request is not successful, this function will throw a fatal exception.
If you'd like to proceed you need to catch that error.
=head1 INDEX FUNCTIONS
=head2 es_index_strip_date( 'index-name' )
Returns the index name with the date removed.
=head2 es_index_bases( 'index-name' )
Returns an array of the possible index base names for this index
=head2 es_index_days_old( 'index-name' )
Return the number of days old this index is.
=head2 es_index_shards( 'index-name' )
Returns the number of replicas for a given index.
=head2 es_index_valid( 'index-name' )
Checks if the specified index is valid
=head2 es_index_fields('index-name')
Returns a hash reference with the following data:
key_name:
type: field_data_type
# If the field is nested
nested_path: nested_path
nested_key: nested_key
=head2 es_index_segments( 'index-name' )
Exposes GET /$index/_segments
Returns the segment data from the index in hashref:
=head2 es_index_stats( 'index-name' )
Exposes GET /$index/_stats
Returns a hashref
=head1 INDICES FUNCTIONS
=head2 es_indices_meta
Returns the hash of index meta data.
=head1 MAINTENANCE FUNCTIONS
=head2 es_close_index('index-name')
Closes an index
=head2 es_open_index('index-name')
( run in 1.332 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )