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

# Class LongAggregationsFacetRecorder

java.lang.Object
org.apache.lucene.sandbox.facet.recorders.LongAggregationsFacetRecorder

All Implemented Interfaces:
  `FacetRecorder`

public final class LongAggregationsFacetRecorder extends Object implements FacetRecorder
`FacetRecorder` that computes multiple long aggregations per facet.

TODO: [premature optimization idea] if instead of one array we keep aggregations in two LongVector (one for MAX aggregation and one for SUM) we can benefit from SIMD?

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

## Constructor Summary

Constructors
Constructor
Description
`LongAggregationsFacetRecorder(LongValuesSource[] longValuesSources, Reducer[] reducers)`
Constructor.

## 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.
`long`
`getRecordedValue(int ord, int valuesId)`
Return aggregated value for facet ordinal and aggregation ID, or zero as default.
`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.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### LongAggregationsFacetRecorder

public LongAggregationsFacetRecorder(LongValuesSource[] longValuesSources, Reducer[] reducers)
Constructor.

## Method Details

### getLeafRecorder

public LeafFacetRecorder getLeafRecorder(LeafReaderContext context) throws IOException
Description copied from interface: `FacetRecorder`
Get leaf recorder.

Specified by:
  `getLeafRecorder` in interface `FacetRecorder`
Throws:
  `IOException`

### recordedOrds

public OrdinalIterator recordedOrds()
Description copied from interface: `FacetRecorder`
Return next collected ordinal, or `OrdinalIterator.NO_MORE_ORDS`

Specified by:
  `recordedOrds` in interface `FacetRecorder`

### isEmpty

public boolean isEmpty()
Description copied from interface: `FacetRecorder`
True if there are no records

Specified by:
  `isEmpty` in interface `FacetRecorder`

### reduce

public void reduce(FacetCutter facetCutter) throws IOException
Description copied from interface: `FacetRecorder`
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 `FacetRecorder.getLeafRecorder(org.apache.lucene.index.LeafReaderContext)` or `LeafFacetRecorder.record(int, int)` on its leaf recorders.

Specified by:
  `reduce` in interface `FacetRecorder`
Throws:
  `IOException`

### contains

public boolean contains(int ordinal)
Description copied from interface: `FacetRecorder`
Check if any data was recorded for provided facet ordinal.

Specified by:
  `contains` in interface `FacetRecorder`

### getRecordedValue

public long getRecordedValue(int ord, int valuesId)
Return aggregated value for facet ordinal and aggregation ID, or zero as default.