java.lang.Object
org.apache.lucene.facet.Facets
org.apache.lucene.facet.taxonomy.TaxonomyFacets
- Direct Known Subclasses:
FastTaxonomyFacetCounts
,FloatTaxonomyFacets
,IntTaxonomyFacets
Base class for all taxonomy-based facets impls.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate class
protected static class
private static class
(package private) static final record
Intermediate result to store top children for a given path before resolving labels, etc. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate ParallelTaxonomyArrays.IntArray
Maps parent ordinal to its child, or -1 if the parent is childless.(package private) final FacetsConfig
FacetsConfig
provided to the constructor.(package private) int[]
Dense ordinal counts.(package private) final FacetsCollector
FacetsCollector
provided to the constructor.(package private) final String
Index field name provided to the constructor.(package private) boolean
Have value counters been initialized.(package private) final ParallelTaxonomyArrays.IntArray
Maps an ordinal to its parent, or -1 if there is no parent (root node).private ParallelTaxonomyArrays.IntArray
Maps an ordinal to its sibling, or -1 if there is no sibling.(package private) IntIntHashMap
Sparse ordinal counts.(package private) final TaxonomyReader
TaxonomyReader
provided to the constructor.protected Comparator
<Number> -
Constructor Summary
ConstructorsConstructorDescriptionTaxonomyFacets
(String indexFieldName, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) Sole constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected Number
Apply an aggregation to the two values and return the result.boolean
Returns true if the (costly, and lazily initialized) children int[] was initialized.private FacetResult
createFacetResult
(TaxonomyFacets.TopChildrenForPath topChildrenForPath, String dim, String... path) Create a FacetResult for the provided dim + path and intermediate results.protected Number
getAggregationValue
(int ordinal) Get the aggregation value for this ordinal.getAllChildren
(String dim, String... path) Returns all child labels with non-zero counts under the specified path.getAllDims
(int topN) Returns topN labels for any dimension that had hits, sorted by the number of hits that dimension matched; this is used for "sparse" faceting, where many different dimensions were indexed, for example depending on the type of document.(package private) ParallelTaxonomyArrays.IntArray
Returns int[] mapping each ordinal to its first child; this is a large array and is computed (and then saved) the first time this method is invoked.protected int
getCount
(int ordinal) Get the count for this ordinal.(package private) ParallelTaxonomyArrays.IntArray
Returns int[] mapping each ordinal to its next sibling; this is a large array and is computed (and then saved) the first time this method is invoked.getSpecificValue
(String dim, String... path) Return the count or value for a specific path.getTopChildren
(int topN, String dim, String... path) Returns the topN child labels under the specified path.protected TaxonomyFacets.TopChildrenForPath
getTopChildrenForPath
(FacetsConfig.DimConfig dimConfig, int pathOrd, int topN) Determine the top-n children for a specified dimension + path.getTopDims
(int topNDims, int topNChildren) Returns labels for topN dimensions and their topNChildren sorted by the number of hits/aggregated values that dimension matched.(package private) boolean
Were any values actually aggregated during counting?protected void
protected TopOrdAndNumberQueue.OrdAndValue
insertIntoQueue
(TopOrdAndNumberQueue q, TopOrdAndNumberQueue.OrdAndValue incomingOrdAndValue, int ord) protected TopOrdAndNumberQueue
makeTopOrdAndNumberQueue
(int topN) Return aTopOrdAndNumberQueue
of the appropriate type, i.e.protected Number
Return the value for a missing aggregation, i.e.protected TaxonomyFacets.AggregatedValue
(package private) void
rollup()
Rolls up any single-valued hierarchical dimensions.private int
rollup
(int ord) protected void
setCount
(int ordinal, int newValue) Set the count for this ordinal tonewValue
.protected void
setIncomingValue
(TopOrdAndNumberQueue.OrdAndValue incomingOrdAndValue, int ord) boolean
Returns true if the (costly, and lazily initialized) sibling int[] was initialized.protected void
updateValueFromRollup
(int ordinal, int childOrdinal) Roll-up the aggregation values fromchildOrdinal
toordinal
.private boolean
useHashTable
(FacetsCollector fc, TaxonomyReader taxoReader) Return true if a sparse hash table should be used for counting, instead of a dense int[].(package private) FacetsConfig.DimConfig
Verifies and returnsFacetsConfig.DimConfig
for the given dimension name.Methods inherited from class org.apache.lucene.facet.Facets
validateTopN
-
Field Details
-
indexFieldName
Index field name provided to the constructor. -
taxoReader
TaxonomyReader
provided to the constructor. -
config
FacetsConfig
provided to the constructor. -
fc
FacetsCollector
provided to the constructor. -
children
Maps parent ordinal to its child, or -1 if the parent is childless. -
siblings
Maps an ordinal to its sibling, or -1 if there is no sibling. -
parents
Maps an ordinal to its parent, or -1 if there is no parent (root node). -
counts
int[] countsDense ordinal counts. -
sparseCounts
IntIntHashMap sparseCountsSparse ordinal counts. -
initialized
boolean initializedHave value counters been initialized. -
valueComparator
-
-
Constructor Details
-
TaxonomyFacets
TaxonomyFacets(String indexFieldName, TaxonomyReader taxoReader, FacetsConfig config, FacetsCollector fc) throws IOException Sole constructor.- Throws:
IOException
-
-
Method Details
-
useHashTable
Return true if a sparse hash table should be used for counting, instead of a dense int[]. -
initializeValueCounters
protected void initializeValueCounters() -
setCount
protected void setCount(int ordinal, int newValue) Set the count for this ordinal tonewValue
. -
getCount
protected int getCount(int ordinal) Get the count for this ordinal. -
getAggregationValue
Get the aggregation value for this ordinal. -
aggregate
Apply an aggregation to the two values and return the result. -
hasValues
boolean hasValues()Were any values actually aggregated during counting? -
getChildren
Returns int[] mapping each ordinal to its first child; this is a large array and is computed (and then saved) the first time this method is invoked.- Throws:
IOException
-
getSiblings
Returns int[] mapping each ordinal to its next sibling; this is a large array and is computed (and then saved) the first time this method is invoked.- Throws:
IOException
-
childrenLoaded
public boolean childrenLoaded()Returns true if the (costly, and lazily initialized) children int[] was initialized. -
siblingsLoaded
public boolean siblingsLoaded()Returns true if the (costly, and lazily initialized) sibling int[] was initialized. -
verifyDim
Verifies and returnsFacetsConfig.DimConfig
for the given dimension name.- Returns:
FacetsConfig.DimConfig
for the given dim, orFacetsConfig.DEFAULT_DIM_CONFIG
if it was never manually configured.- Throws:
IllegalArgumentException
- if the provided dimension was manually configured, but itsFacetsConfig.DimConfig.indexFieldName
does not matchindexFieldName
.
-
updateValueFromRollup
Roll-up the aggregation values fromchildOrdinal
toordinal
. Overrides should probably call this to update the counts. Overriding allows us to work with primitive types for the aggregation values, keeping aggregation efficient.- Throws:
IOException
-
makeTopOrdAndNumberQueue
Return aTopOrdAndNumberQueue
of the appropriate type, i.e. aTopOrdAndIntQueue
or aTopOrdAndFloatQueue
. -
missingAggregationValue
Return the value for a missing aggregation, i.e.-1
or-1f
. -
rollup
Rolls up any single-valued hierarchical dimensions.- Throws:
IOException
-
rollup
- Throws:
IOException
-
createFacetResult
private FacetResult createFacetResult(TaxonomyFacets.TopChildrenForPath topChildrenForPath, String dim, String... path) throws IOException Create a FacetResult for the provided dim + path and intermediate results. Does the extra work of resolving ordinals -> labels, etc. Will return null if there are no children.- Throws:
IOException
-
getAllChildren
Description copied from class:Facets
Returns all child labels with non-zero counts under the specified path. Users should make no assumptions about ordering of the children. Returns null if the specified path doesn't exist or if this dimension was never seen.- Specified by:
getAllChildren
in classFacets
- Throws:
IOException
-
setIncomingValue
-
insertIntoQueue
protected TopOrdAndNumberQueue.OrdAndValue insertIntoQueue(TopOrdAndNumberQueue q, TopOrdAndNumberQueue.OrdAndValue incomingOrdAndValue, int ord) -
newAggregatedValue
-
getTopChildrenForPath
protected TaxonomyFacets.TopChildrenForPath getTopChildrenForPath(FacetsConfig.DimConfig dimConfig, int pathOrd, int topN) throws IOException Determine the top-n children for a specified dimension + path. Results are in an intermediate form.- Throws:
IOException
-
getTopChildren
Description copied from class:Facets
Returns the topN child labels under the specified path. Returns null if the specified path doesn't exist or if this dimension was never seen.- Specified by:
getTopChildren
in classFacets
- Throws:
IOException
-
getSpecificValue
Description copied from class:Facets
Return the count or value for a specific path. Returns -1 if this path doesn't exist, else the count.- Specified by:
getSpecificValue
in classFacets
- Throws:
IOException
-
getAllDims
Description copied from class:Facets
Returns topN labels for any dimension that had hits, sorted by the number of hits that dimension matched; this is used for "sparse" faceting, where many different dimensions were indexed, for example depending on the type of document.- Specified by:
getAllDims
in classFacets
- Throws:
IOException
-
getTopDims
Description copied from class:Facets
Returns labels for topN dimensions and their topNChildren sorted by the number of hits/aggregated values that dimension matched. Results should be the same as calling getAllDims and then only using the first topNDims. Note that dims should be configured as requiring dim counts if using this functionality to ensure accurate counts are available (see:FacetsConfig.setRequireDimCount(String, boolean)
).Sub-classes may want to override this implementation with a more efficient one if they are able.
- Overrides:
getTopDims
in classFacets
- Throws:
IOException
-