🔎
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

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 max aggregation 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 ElasticSearch aggregation reference.

PreviousSearchNextSuggestions

Last updated 2 years ago

Was this helpful?