org.apache.lucene.facet.search
public class TopKInEachNodeHandler extends PartitionsFacetResultsHandler
FacetResult from the FacetArrays aggregated for a
particular FacetRequest. The generated FacetResult is a
subtree of the taxonomy tree. Its root node,
FacetResult.getFacetResultNode(), is the facet specified by
FacetRequest.categoryPath, and the enumerated children,
FacetResultNode.subResults, of each node in that FacetResult
are the top K ( = FacetRequest.numResults) among its children in the
taxonomy. The depth (number of levels excluding the root) of the
FacetResult tree is specified by FacetRequest.getDepth().
Because the number of selected children of each node is restricted, and not
the overall number of nodes in the FacetResult, facets not selected
into FacetResult might have better values, or ordinals, (typically,
higher counts), than facets that are selected into the FacetResult.
The generated FacetResult also provides with
FacetResult.getNumValidDescendants(), which returns the total number
of facets that are descendants of the root node, no deeper than
FacetRequest.getDepth(), and which have valid value. The rootnode
itself is not counted here. Valid value is determined by the
FacetResultsHandler. TopKInEachNodeHandler defines valid as
!= 0.
NOTE: this code relies on the assumption that
TaxonomyReader.INVALID_ORDINAL == -1, a smaller value than any valid
ordinal.
| Modifier and Type | Class and Description |
|---|---|
protected static class |
TopKInEachNodeHandler.AACO
Maintains an array of
AggregatedCategory. |
static class |
TopKInEachNodeHandler.IntermediateFacetResultWithHash
Intermediate result to hold counts from one or more partitions processed
thus far.
|
facetArrays, facetRequest, resolver, taxonomyReader| Constructor and Description |
|---|
TopKInEachNodeHandler(TaxonomyReader taxonomyReader,
FacetRequest facetRequest,
OrdinalValueResolver resolver,
FacetArrays facetArrays) |
| Modifier and Type | Method and Description |
|---|---|
IntermediateFacetResult |
fetchPartitionResult(int offset)
Recursively explore all facets that can be potentially included in the
FacetResult to be generated, and that belong to the given
partition, so that values can be examined and collected. |
void |
labelResult(FacetResult facetResult)
Label results according to settings in
FacetRequest, such as
FacetRequest.getNumLabel(). |
IntermediateFacetResult |
mergeResults(IntermediateFacetResult... tmpResults)
Merge several partitions'
IntermediateFacetResult-s into one of the
same format |
FacetResult |
rearrangeFacetResult(FacetResult facetResult)
Perform any rearrangement as required on a facet result that has changed after
it was rendered.
|
FacetResult |
renderFacetResult(IntermediateFacetResult tmpResult)
Create a facet result from the temporary result.
|
compute, isSelfPartitionpublic TopKInEachNodeHandler(TaxonomyReader taxonomyReader, FacetRequest facetRequest, OrdinalValueResolver resolver, FacetArrays facetArrays)
public IntermediateFacetResult fetchPartitionResult(int offset) throws IOException
FacetResult to be generated, and that belong to the given
partition, so that values can be examined and collected. For each such
node, gather its top K (FacetRequest.numResults) children among its
children that are encountered in the given particular partition (aka
current counting list).fetchPartitionResult in class PartitionsFacetResultsHandleroffset - to offset + the length of the count arrays within
arrays (exclusive)IntermediateFacetResult consisting of
IntToObjectMap that maps potential FacetResult
nodes to their top K children encountered in the current partition.
Note that the mapped potential tree nodes need not belong to the
given partition, only the top K children mapped to. The aim is to
identify nodes that are certainly excluded from the
FacetResult to be eventually (after going through all the
partitions) returned by this handler, because they have K better
siblings, already identified in this partition. For the identified
excluded nodes, we only count number of their descendants in the
subtree (to be included in
FacetResult.getNumValidDescendants()), but not bother with
selecting top K in these generations, which, by definition, are,
too, excluded from the FacetResult tree.IOException - in case
TaxonomyReader.getOrdinal(org.apache.lucene.facet.taxonomy.CategoryPath)
does.fetchPartitionResult(int)public IntermediateFacetResult mergeResults(IntermediateFacetResult... tmpResults)
IntermediateFacetResult-s into one of the
same formatmergeResults in class PartitionsFacetResultsHandlertmpResults - one or more temporary results created by this
handler.mergeResults(IntermediateFacetResult...)public void labelResult(FacetResult facetResult) throws IOException
PartitionsFacetResultsHandlerFacetRequest, such as
FacetRequest.getNumLabel(). Usually invoked by
OldFacetsAccumulator.accumulate(ScoredDocIDs)labelResult in class PartitionsFacetResultsHandlerfacetResult - facet result to be labeled.IOException - on errorpublic FacetResult rearrangeFacetResult(FacetResult facetResult)
PartitionsFacetResultsHandlerPossible use case: a sampling facets accumulator invoked another other facets accumulator on a sample set of documents, obtained rendered facet results, fixed their counts, and now it is needed to sort the results differently according to the fixed counts.
rearrangeFacetResult in class PartitionsFacetResultsHandlerfacetResult - result to be rearranged.FacetResultNode.valuepublic FacetResult renderFacetResult(IntermediateFacetResult tmpResult) throws IOException
PartitionsFacetResultsHandlerrenderFacetResult in class PartitionsFacetResultsHandlertmpResult - temporary result to be rendered as a FacetResultIOException - on error.Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.