# Package org.apache.lucene.facet

package org.apache.lucene.facet
Faceted search.

This module provides multiple methods for computing facet counts and value aggregations:

- Taxonomy-based methods rely on a separate taxonomy index to map hierarchical facet paths to global int ordinals for fast counting at search time; these methods can compute counts ((`FastTaxonomyFacetCounts`) aggregate long or double values `TaxonomyFacetIntAssociations`, `TaxonomyFacetFloatAssociations`. Add `FacetField` or `AssociationFacetField` to your documents at index time to use taxonomy-based methods.
- Sorted-set doc values method does not require a separate taxonomy index, and computes counts based on sorted set doc values fields (`SortedSetDocValuesFacetCounts`). Add `SortedSetDocValuesFacetField` to your documents at index time to use sorted set facet counts.
- Range faceting `LongRangeFacetCounts`, `DoubleRangeFacetCounts` compute counts for a dynamic numeric range from a provided `LongValuesSource` (previously indexed numeric field, or a dynamic expression such as distance).

At search time you first run your search, but pass a `FacetsCollector` to gather all hits (and optionally, scores for each hit). Then, instantiate whichever facet methods you'd like to use to compute aggregates. Finally, all methods implement a common `Facets` base API that you use to obtain specific facet counts.

The various `FacetsCollectorManager.search(org.apache.lucene.search.IndexSearcher, org.apache.lucene.search.Query, int, org.apache.lucene.facet.FacetsCollectorManager)` utility methods are useful for doing an "ordinary" search (sorting by score, or by a specified Sort) but also collecting into a `FacetsCollectorManager` for subsequent faceting.

- Related Packages
  Package
  Description
  org.apache.lucene.facet.facetset
  Provides FacetSets faceting capabilities which allows users to facet on high dimensional field values.
  org.apache.lucene.facet.range
  Provides range faceting capabilities.
  org.apache.lucene.facet.rangeonrange
  Provides range on range faceting capabilities.
  org.apache.lucene.facet.sortedset
  Provides faceting capabilities over facets that were indexed with `SortedSetDocValuesFacetField`.
  org.apache.lucene.facet.taxonomy
  Taxonomy of Categories.
- Class
  Description
  DrillDownQuery
  A `Query` for drill-down over facet categories.
  DrillSideways
  Computes drill down and sideways counts for the provided `DrillDownQuery`.
  DrillSideways.ConcurrentDrillSidewaysResult<R>
  Result of a concurrent drill sideways search, including the `Facets` and `TopDocs`.
  DrillSideways.DrillSidewaysResult
  Result of a drill sideways search, including the `Facets` and `TopDocs`.
  DrillSideways.Result<T,R>
  `DrillSideways.search(DrillDownQuery, CollectorManager, List)` result.
  FacetCountsWithFilterQuery
  Base class for facet counts.
  FacetField
  Add an instance of this to your `Document` for every facet label.
  FacetQuery
  A term `Query` over a `FacetField`.
  FacetResult
  Counts or aggregates for a single dimension.
  Facets
  Common base class for all facets implementations.
  FacetsCollector
  Collects hits for subsequent faceting.
  FacetsCollector.MatchingDocs
  Holds the documents that were matched in the `LeafReaderContext`.
  FacetsCollectorManager
  A `CollectorManager` implementation which produces FacetsCollector and produces a merged FacetsCollector.
  FacetsCollectorManager.FacetsResult
  Holds results of a search run via static utility methods exposed by this class.
  FacetsConfig
  Records per-dimension configuration.
  FacetsConfig.DimConfig
  Holds the configuration for one dimension
  FacetsConfig.DrillDownTermsIndexing
  Drill down terms indexing option to control whether dimension and sub-path terms should be indexed.
  FacetUtils
  Utility class with a single method for getting a DocIdSetIterator that skips deleted docs
  LabelAndValue
  Single label and its value, usually contained in a `FacetResult`.
  LongValueFacetCounts
  `Facets` implementation that computes counts for all unique long values, more efficiently counting small values (0-1023) using an int array, and switching to a `HashMap` for values above 1023.
  MultiDoubleValues
  Per-segment, per-document double values, which can be calculated at search-time.
  MultiDoubleValuesSource
  Base class for producing `MultiDoubleValues`.
  MultiFacetQuery
  A multi-terms `Query` over a `FacetField`.
  MultiFacets
  Maps specified dims to provided Facets impls; else, uses the default Facets impl.
  MultiLongValues
  Per-segment, per-document long values, which can be calculated at search-time.
  MultiLongValuesSource
  Base class for producing `MultiLongValues`.
  RandomSamplingFacetsCollector
  Collects hits for subsequent faceting, using sampling if needed.
  StringDocValuesReaderState
  Stores an `OrdinalMap` created for a specific `IndexReader` (`reader`) + `field`.
  StringValueFacetCounts
  Compute facet counts from a previously indexed `SortedSetDocValues` or `SortedDocValues` field.
  TopOrdAndFloatQueue
  Keeps highest results, first by largest float value, then tie-break by smallest ord.
  TopOrdAndFloatQueue.OrdAndFloat
  Holds an ordinal and a float value.
  TopOrdAndIntQueue
  Keeps highest results, first by largest int value, then tie-break by smallest ord.
  TopOrdAndIntQueue.OrdAndInt
  Holds an ordinal and an int value.
  TopOrdAndNumberQueue
  Keeps highest results, first by largest value, then tie-break by smallest ord.
  TopOrdAndNumberQueue.OrdAndValue
  Holds a single entry.