Class CountFacetRecorder

java.lang.Object
org.apache.lucene.sandbox.facet.recorders.CountFacetRecorder
All Implemented Interfaces:
FacetRecorder

public final class CountFacetRecorder extends Object implements FacetRecorder
FacetRecorder to count facets.

TODO: add an option to keep counts in an array, to improve performance for facets with small number of ordinals e.g. range facets. Options: - LeafFacetCutter can inform LeafFacetRecorder about expected number of facet ordinals (FacetFieldCollector can orchestrate that). If expeted facet ord number is below some threshold - use array instead of a map? - first 100/1k counts in array, the rest - in a map; the limit can also be provided in a constructor? It is similar to what LongValuesFacetCounts does today.

TODO: We can also consider collecting 2 (3, 4, ..., can be parametrizes) slices to a single sync map which can reduce thread contention compared to single sync map for all slices; at the same time there will be less work for reduce method. So far reduce wasn't a bottleneck for us, but it is definitely not free.

TODO: If we come back to some for of synchronized count maps, we should be more careful what we acquire locks for - we used to lock addTo method itself, but it could be faster if we only synchronized after computing the key's hash; or we can lock the entire map only if we need to insert key, and lock single key otherwise?

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