Package org.apache.lucene.sandbox.facet.cutters

# Interface FacetCutter

All Known Implementing Classes:
  `DoubleRangeFacetCutter`, `LongRangeFacetCutter`, `LongValueFacetCutter`, `TaxonomyFacetsCutter`

public interface FacetCutter
Creates `LeafFacetCutter` for each leaf.

TODO: do we need FacetCutterManager similar to CollectorManager, e.g. is createLeafCutter always thread safe?

WARNING: This API is experimental and might change in incompatible ways in the next release.

## Method Summary

Modifier and Type
Method
Description
`LeafFacetCutter`
`createLeafCutter(LeafReaderContext context)`
Get cutter for the leaf.
`default OrdinalIterator`
`getChildrenOrds(int ord)`
For facets that have hierarchy (levels), get all children ordinals for given ord.
`default OrdinalIterator`
`getOrdinalsToRollup()`
For facets that have hierarchy (levels), return all top level dimension ordinals that require rollup.

## Method Details

### createLeafCutter

LeafFacetCutter createLeafCutter(LeafReaderContext context) throws IOException
Get cutter for the leaf.

Throws:
  `IOException`

### getOrdinalsToRollup

default OrdinalIterator getOrdinalsToRollup() throws IOException
For facets that have hierarchy (levels), return all top level dimension ordinals that require rollup.

Rollup is an optimization for facets types that support hierarchy, if single document belongs to at most one node in the hierarchy, we can first record data for these nodes only, and then roll up values to parent ordinals.

Default implementation returns null, which means that rollup is not needed.

Throws:
  `IOException`

### getChildrenOrds

default OrdinalIterator getChildrenOrds(int ord) throws IOException
For facets that have hierarchy (levels), get all children ordinals for given ord.

Throws:
  `IOException`