Package org.apache.lucene.sandbox.facet.recorders

# Interface FacetRecorder

All Known Implementing Classes:
  `CountFacetRecorder`, `LongAggregationsFacetRecorder`, `MultiFacetsRecorder`

public interface FacetRecorder
Record data for each facet of each doc.

TODO: In the next iteration we can add an extra layer between FacetRecorder and LeafFacetRecorder, e.g. SliceFacetRecorder. The new layer will be created per `Collector`, which means that collecting of multiple leafs (segments) within a slice is sequential and can be done to a single non-sync map to improve performance and reduce memory consumption. We already tried that, but didn't see any performance improvement. Given that it also makes lazy leaf recorder init in `FacetFieldCollector` trickier, it was decided to rollback the initial attempt and try again later, in the next iteration.

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

## Method Summary

Modifier and Type
Method
Description
`boolean`
`contains(int ordinal)`
Check if any data was recorded for provided facet ordinal.
`LeafFacetRecorder`
`getLeafRecorder(LeafReaderContext context)`
Get leaf recorder.
`boolean`
`isEmpty()`
True if there are no records
`OrdinalIterator`
`recordedOrds()`
Return next collected ordinal, or `OrdinalIterator.NO_MORE_ORDS`
`void`
`reduce(FacetCutter facetCutter)`
Reduce leaf recorder results into this recorder.

## Method Details

### getLeafRecorder

LeafFacetRecorder getLeafRecorder(LeafReaderContext context) throws IOException
Get leaf recorder.

Throws:
  `IOException`

### recordedOrds

OrdinalIterator recordedOrds()
Return next collected ordinal, or `OrdinalIterator.NO_MORE_ORDS`

### isEmpty

boolean isEmpty()
True if there are no records

### reduce

void reduce(FacetCutter facetCutter) throws IOException
Reduce leaf recorder results into this recorder. If `FacetCutter.getOrdinalsToRollup()` result is not null, it also rolls up values.

After this method is called, it's illegal to add values to recorder, i.e. calling `getLeafRecorder(org.apache.lucene.index.LeafReaderContext)` or `LeafFacetRecorder.record(int, int)` on its leaf recorders.

Throws:
  `UnsupportedOperationException` - if `FacetCutter.getOrdinalsToRollup()` returns not null but this recorder doesn't support rollup.
  `IOException`

### contains

boolean contains(int ordinal)
Check if any data was recorded for provided facet ordinal.