Lucene.Net.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, TaxonomyFacetCounts) aggregate long or double values TaxonomyFacetSumInt32Associations, TaxonomyFacetSumSingleAssociations, 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 Int64RangeFacetCounts, DoubleRangeFacetCounts compute counts for a dynamic numeric range from a provided <xref:Lucene.Net.Queries.Function.ValueSource> (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() 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.