🔎
cbElasticsearch
  • Getting Started
    • Installation
    • Configuration
    • Secondary Cluster
  • Indices
    • Managing Indices
      • Index Lifecycles
      • Index Templates
    • Mapping Builder
    • Aliases
    • Reindexing
    • Data Streams
  • Searching
    • Search
    • Aggregations
    • Suggestions
  • Documents
  • Logging
  • Pipelines
  • Tasks
  • Contributing
Powered by GitBook
On this page
  • Creating an Aggregation
  • Max Aggregation
  • Terms Aggregation
  • Working with Aggregations

Was this helpful?

Edit on GitHub
Export as PDF
  1. Searching

Aggregations

Learn how to summarize or "aggregate" data with cbElasticsearch

PreviousSearchNextSuggestions

Last updated 2 years ago

Was this helpful?

In some cases, you aren't interested in searching documents as you are in retrieving specific information stored within each document. It is for such a purpose that Elasticsearch provides the ability to aggregate, or summarize, index data.

Creating an Aggregation

cbElasticsearch's SearchBuilder provides an aggregation() method for simple aggregation definitions:

searchBuilder.aggregation( string name, struct options )

Max Aggregation

Here's an example of a using SearchBuilder:

searchBuilder.aggregation( "last_updated", { "max": { "field": "meta.timestamp" } } )

This aggregation will retrieve the most recent date value stored in meta.timestamp.

Terms Aggregation

Use a terms aggregation to return an array of term "buckets", one per value:

searchBuilder.aggregation( "movie_genres", { "terms": { "field": "genre" } } )

Working with Aggregations

To run the query and retrieve aggregations, call searchBuilder.execute() followed by getAggregations(). getAggregations() will return a key/value struct where the key is your provided aggregation name:

var data = mySearch.aggregation( "last_updated", { "max": { "field": "meta.timestamp" } } )
                    .execute()
                    .getAggregations()[ "last_updated" ];

For a simple metrics aggregation, you should be able to use the value or value_as_string keys of the returned aggregation:

function getLastUpdateTime(){
    var aggregation = getSearchBuilder()
                        .new( "exams" )
                        .aggregation( "last_updated", { "max": { "field": "meta.timestamp" } } )
                        .execute()
                        .getAggregations();
                
    return aggregation[ "last_updated" ][ "value_as_string" ];
}

In contrast, bucket aggregations return a buckets array which can be used as-is or mapped into a separate result entirely:

function getMovieGenres(){
    var aggregations = getSearchBuilder()
                        .new( "exams" )
                        .aggregation( "genres", { "terms": { "field": "genre" } })
                        .execute()
                        .getAggregations();
                
    return aggregations[ "genres" ].buckets.map( ( term ) => term.key );
}

For a full break down on aggregations, check out the .

max aggregation
ElasticSearch aggregation reference