Skip to main content
Aggregations let you compute analytics over your indexed data — metrics like averages, sums, and statistics, as well as bucket-based groupings like terms, ranges, and histograms. They are useful when you want to answer questions like:
  • “What is the average price?”
  • “How many unique users do we have?”
  • “How many orders fall into each price range?”
  • “How does traffic change per hour/day?”
const result = await index.aggregate({
  aggregations: {
    avg_price: { $avg: { field: "price" } },
  },
});
Aggregation requests have two phases:
  1. Document selection: Optional filter selects which documents participate.
  2. Aggregation computation: the selected set is reduced into metric values and/or buckets.
Each aggregation is defined with an alias (the key you choose for the result) and an operator that specifies what to compute.

Filtering

Use filter to restrict which documents participate in the aggregation. Filtering uses the same query syntax as queries.
const result = await index.aggregate({
  filter: { inStock: true },
  aggregations: {
    avg_price: { $avg: { field: "price" } },
  },
});

Multiple Aggregations in One Request

You can compute multiple top-level aggregations in one call by defining multiple aliases under aggregations. Each alias is computed against the same filtered document set.
const result = await index.aggregate({
  aggregations: {
    avg_price: { $avg: { field: "price" } },
    price_stats: { $stats: { field: "price" } },
    by_category: { $terms: { field: "category", size: 5 } },
    price_ranges: {
      $range: {
        field: "price",
        ranges: [{ to: 50 }, { from: 50 }],
      },
    },
  },
});

Nested Aggregations

Bucket operators can include sub-aggregations via $aggs, so you can compute per-bucket metrics.
  • $terms, $range, $histogram, and $dateHistogram support nested $aggs.
  • $facet does not support nested $aggs.
  • Metric operators do not support nested $aggs.
const result = await index.aggregate({
  aggregations: {
    by_category: {
      $terms: { field: "category" },
      $aggs: {
        avg_price: { $avg: { field: "price" } },
        min_price: { $min: { field: "price" } },
      },
    },
  },
});

Operator Families

Metric Aggregations

Metric aggregations return numeric summaries.
OperatorTypical use
$avgMean value
$sumTotal
$minSmallest value
$maxLargest value
$countNumber of values
$cardinalityNumber of distinct values
$statsBasic summary stats
$extendedStatsStats + variance/std deviation
$percentilesDistribution cut points
See the metric overview.

Bucket Aggregations

Bucket aggregations partition documents into groups.
OperatorTypical use
$termsTop values by field
$rangeCustom ranges
$histogramFixed numeric bins
$dateHistogramFixed time bins
$facetHierarchical facets
See the bucket overview.