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, taxonomyReader
Constructor and Description |
---|
TopKInEachNodeHandler(TaxonomyReader taxonomyReader,
FacetRequest facetRequest,
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, isSelfPartition
public TopKInEachNodeHandler(TaxonomyReader taxonomyReader, FacetRequest facetRequest, 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 PartitionsFacetResultsHandler
offset
- 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 PartitionsFacetResultsHandler
tmpResults
- one or more temporary results created by this
handler.mergeResults(IntermediateFacetResult...)
public void labelResult(FacetResult facetResult) throws IOException
PartitionsFacetResultsHandler
FacetRequest
, such as
FacetRequest.getNumLabel()
. Usually invoked by
StandardFacetsAccumulator.accumulate(ScoredDocIDs)
labelResult
in class PartitionsFacetResultsHandler
facetResult
- facet result to be labeled.IOException
- on errorpublic FacetResult rearrangeFacetResult(FacetResult facetResult)
PartitionsFacetResultsHandler
Possible 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 PartitionsFacetResultsHandler
facetResult
- result to be rearranged.FacetResultNode.value
public FacetResult renderFacetResult(IntermediateFacetResult tmpResult) throws IOException
PartitionsFacetResultsHandler
renderFacetResult
in class PartitionsFacetResultsHandler
tmpResult
- temporary result to be rendered as a FacetResult
IOException
- on error.Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.