# Package org.apache.lucene.facet

Faceted search.

See: Description

Class Summary
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`.
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.
FacetsConfig: Records per-dimension configuration.
FacetsConfig.DimConfig: Holds the configuration for one dimension
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.
MultiFacetQuery: A multi-terms `Query` over a `FacetField`.
MultiFacets: Maps specified dims to provided Facets impls; else, uses the default Facets impl.
RandomSamplingFacetsCollector: Collects hits for subsequent faceting, using sampling if needed.
TopOrdAndFloatQueue: Keeps highest results, first by largest float value, then tie break by smallest ord.
TopOrdAndFloatQueue.OrdAndValue: Holds a single entry.
TopOrdAndIntQueue: Keeps highest results, first by largest int value, then tie break by smallest ord.
TopOrdAndIntQueue.OrdAndValue: Holds a single entry.

## Package org.apache.lucene.facet Description

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`, `TaxonomyFacetCounts`) aggregate long or double values `TaxonomyFacetSumIntAssociations`, `TaxonomyFacetSumFloatAssociations`, `TaxonomyFacetSumValueSource`. 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 `FacetsCollector.search(org.apache.lucene.search.IndexSearcher, org.apache.lucene.search.Query, int, org.apache.lucene.search.Collector)` utility methods are useful for doing an "ordinary" search (sorting by score, or by a specified Sort) but also collecting into a `FacetsCollector` for subsequent faceting.