Bucket Aggregations

$facet

$facet builds a hierarchical bucket tree from FACET field paths.

Use it for category navigation and drill-down style faceting.

Compatibility

Field TypeSupported
TEXTNo
U64/I64/F64No
DATENo
BOOLNo
KEYWORDNo
FACETYes

Arguments

ArgumentTypeRequiredDescription
fieldstringYesFACET field name.
pathstringYesRoot path to expand. Must start with /.
depthnumberNoLevels to traverse (>= 1). Default: 1.
sizenumberNoMax children per level. Default: 10.
minDocCountnumberNoMinimum docs required for a child bucket. Default: 1.
orderobjectNoOne-key order object: { "count": "asc|desc" } or { "path": "asc|desc" }. Default: { "count": "desc" }.
await index.aggregate({  aggregations: {    by_category: {      $facet: {        field: "category",        path: "/category",      },    },  },});
index.aggregate(    aggregations={        "by_category": {            "$facet": {                "field": "category",                "path": "/category",            }        }    })
SEARCH.AGGREGATE products '{}' '{"by_category": {"$facet": {"field": "category", "path": "/category"}}}'

Output

{  "by_category": {    "path": "/category",    "sumOtherDocCount": 0,    "children": [      { "path": "/category/books", "docCount": 12, "sumOtherDocCount": 0 },      { "path": "/category/electronics", "docCount": 9, "sumOtherDocCount": 0 }    ]  }}
  • Increase depth for multi-level facet trees.
  • Use size and minDocCount to control noise and response size.
  • Use order to sort by count or by path.
await index.aggregate({  aggregations: {    category_tree: {      $facet: {        field: "category",        path: "/category",        depth: 2,        size: 10,        minDocCount: 1,        order: { count: "desc" },      },    },  },});
index.aggregate(    aggregations={        "category_tree": {            "$facet": {                "field": "category",                "path": "/category",                "depth": 2,                "size": 10,                "minDocCount": 1,                "order": {"count": "desc"},            }        }    })
SEARCH.AGGREGATE products '{}' '{"category_tree": {"$facet": {"field": "category", "path": "/category", "depth": 2, "size": 10, "minDocCount": 1, "order": {"count": "desc"}}}}'

With depth: 2, the response includes nested children:

{  "by_cat": {    "path": "/category",    "sumOtherDocCount": 0,    "children": [      {        "docCount": 2,        "path": "/category/books",        "sumOtherDocCount": 0,        "children": [          { "docCount": 1, "path": "/category/books/fiction", "sumOtherDocCount": 0 },          { "docCount": 1, "path": "/category/books/nonfiction", "sumOtherDocCount": 0 }        ]      },      {        "docCount": 2,        "path": "/category/electronics",        "sumOtherDocCount": 0,        "children": [          { "docCount": 1, "path": "/category/electronics/laptops", "sumOtherDocCount": 0 },          { "docCount": 1, "path": "/category/electronics/phones", "sumOtherDocCount": 0 }        ]      }    ]  }}
  • $facet cannot contain $aggs.
  • $facet cannot be used as a sub-aggregation inside another $aggs block.
Loading search…