App-ElasticSearch-Utilities
view release on metacpan or search on metacpan
lib/App/ElasticSearch/Utilities/Aggregations.pm view on Meta::CPAN
if( my $buckets = delete $result->{$k}{buckets} ) {
$buckets{$k} = $buckets;
}
}
}
if( keys %buckets ) {
foreach my $k ( sort keys %buckets ) {
if( @{ $buckets{$k} } ) {
foreach my $bucket ( @{ $buckets{$k} } ) {
push @rows, @{ es_flatten_aggregations($bucket, $k, $row) };
}
}
else {
push @rows, $row;
}
}
}
else {
push @rows, $row;
}
}
else {
foreach my $k ( sort keys %{ $result } ) {
delete $result->{$k}{$_} for @remove;
$extract->($k, $result->{$k});
my $buckets = delete $result->{$k}{buckets};
if( $buckets and @{ $buckets } ) {
foreach my $bucket ( @{ $buckets } ) {
push @rows, @{ es_flatten_aggregations($bucket,$k,$row) };
}
}
else {
push @rows, $row;
}
}
}
return \@rows;
}
# Setup Aliases
*es_flatten_aggs = \&es_flatten_aggregations;
1;
__END__
=pod
=head1 NAME
App::ElasticSearch::Utilities::Aggregations - Code to simplify creating and working with Elasticsearch aggregations
=head1 VERSION
version 8.9
=head1 FUNCTIONS
=head2 is_single_stat()
Returns true if an aggregation returns a single value.
=head2 expand_aggregate_string( token )
Takes a simplified aggregation grammar and expands it the full aggregation hash.
Simple Terms:
field_name
To
{
field_name => {
terms => {
field => 'field_name',
size => 20,
}
}
}
Alias expansion:
alias=field_name
To
{
alias => {
terms => {
field => 'field_name',
size => 20,
}
}
}
Parameters:
alias=field_name:10
To
{
alias => {
terms => {
field => 'field_name',
size => 10,
}
}
}
Parameters, k/v:
alias=field_name:size=13
To
{
alias => {
( run in 1.576 second using v1.01-cache-2.11-cpan-5837b0d9d2c )