# Package org.apache.lucene.facet.taxonomy

Taxonomy of Categories.

See: Description

Interface Summary
TaxonomyWriter: TaxonomyWriter is the interface which the faceted-search library uses to dynamically build the taxonomy at indexing time.

Class Summary
AssociationFacetField: Add an instance of this to your `Document` to add a facet label associated with an arbitrary byte[].
CachedOrdinalsReader: A per-segment cache of documents' facet ordinals.
CachedOrdinalsReader.CachedOrds: Holds the cached ordinals in two parallel `int[]` arrays.
DocValuesOrdinalsReader: Decodes ordinals previously indexed into a BinaryDocValues field
FacetLabel: Holds a sequence of string components, specifying the hierarchical name of a category.
FastTaxonomyFacetCounts: Computes facets counts, assuming the default encoding into DocValues was used.
FloatAssociationFacetField: Add an instance of this to your `Document` to add a facet label associated with a float.
FloatTaxonomyFacets: Base class for all taxonomy-based facets that aggregate to a per-ords float[].
IntAssociationFacetField: Add an instance of this to your `Document` to add a facet label associated with an int.
IntTaxonomyFacets: Base class for all taxonomy-based facets that aggregate to a per-ords int[].
LRUHashMap<K,V>: LRUHashMap is an extension of Java's HashMap, which has a bounded size(); When it reaches that size, each time a new element is added, the least recently used (LRU) entry is removed.
OrdinalMappingLeafReader: A `FilterLeafReader` for updating facets ordinal references, based on an ordinal map.
OrdinalsReader: Provides per-document ordinals.
OrdinalsReader.OrdinalsSegmentReader: Returns ordinals for documents in one segment.

ParallelTaxonomyArrays

Returns 3 arrays for traversing the taxonomy: `parents`: `parents[i]` denotes the parent of category ordinal `i`. `children`: `children[i]` denotes a child of category ordinal `i`. `siblings`: `siblings[i]` denotes the sibling of category ordinal `i`. To traverse the taxonomy tree, you typically start with `children[0]` (ordinal 0 is reserved for ROOT), and then depends if you want to do DFS or BFS, you call `children[children[0]]` or `siblings[children[0]]` and so forth, respectively.

PrintTaxonomyStats: Prints how many ords are under each dimension.
SearcherTaxonomyManager: Manages near-real-time reopen of both an IndexSearcher and a TaxonomyReader.
SearcherTaxonomyManager.SearcherAndTaxonomy: Holds a matched pair of `IndexSearcher` and `TaxonomyReader`
TaxonomyFacetCounts: Reads from any `OrdinalsReader`; use `FastTaxonomyFacetCounts` if you are using the default encoding from `BinaryDocValues`.
TaxonomyFacets: Base class for all taxonomy-based facets impls.
TaxonomyFacetSumFloatAssociations: Aggregates sum of int values previously indexed with `FloatAssociationFacetField`, assuming the default encoding.
TaxonomyFacetSumIntAssociations: Aggregates sum of int values previously indexed with `IntAssociationFacetField`, assuming the default encoding.
TaxonomyFacetSumValueSource: Aggregates sum of values from `DoubleValues.doubleValue()`, for each facet label.
TaxonomyMergeUtils: Utility methods for merging index and taxonomy directories.
TaxonomyReader: TaxonomyReader is the read-only interface with which the faceted-search library uses the taxonomy during search time.
TaxonomyReader.ChildrenIterator: An iterator over a category's children.

## Package org.apache.lucene.facet.taxonomy Description

Taxonomy of Categories.

Facets are defined using a hierarchy of categories, known as a Taxonomy. For example, the taxonomy of a book store application might have the following structure:

- Author
  - Mark Twain
  - J. K. Rowling

- Date
  - 2010
  - March
  - April
- 2009

The Taxonomy translates category-paths into integer identifiers (often termed ordinals) and vice versa. The category `Author/Mark Twain` adds two nodes to the taxonomy: `Author` and `Author/Mark Twain`, each is assigned a different ordinal. The taxonomy maintains the invariant that a node always has an ordinal that is < all its children.