org.apache.lucene.facet.search
Class FacetsAccumulator

java.lang.Object
  extended by org.apache.lucene.facet.search.FacetsAccumulator
Direct Known Subclasses:
SamplingWrapper, StandardFacetsAccumulator

public abstract class FacetsAccumulator
extends Object

Driver for Accumulating facets of faceted search requests over given documents.

WARNING: This API is experimental and might change in incompatible ways in the next release.

Field Summary
static double DEFAULT_COMPLEMENT_THRESHOLD
          Default threshold for using the complements optimization.
static double DISABLE_COMPLEMENT
          Passing this to setComplementThreshold(double) will disable using complement optimization.
static double FORCE_COMPLEMENT
          Passing this to setComplementThreshold(double) will force using complement optimization.
protected  IndexReader indexReader
           
protected  FacetSearchParams searchParams
           
protected  TaxonomyReader taxonomyReader
           
 
Constructor Summary
FacetsAccumulator(FacetSearchParams searchParams, IndexReader indexReader, TaxonomyReader taxonomyReader)
           
 
Method Summary
abstract  List<FacetResult> accumulate(ScoredDocIDs docids)
          Accumulate facets over given documents, according to facet requests in effect.
 double getComplementThreshold()
           
protected  boolean isAllowLabeling()
          Check if labeling is allowed for this accumulator.
protected  boolean mayComplement()
          check if all requests are complementable
protected  void setAllowLabeling(boolean allowLabeling)
          Set whether labeling is allowed for this accumulator.
 void setComplementThreshold(double complementThreshold)
          Set the complement threshold.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_COMPLEMENT_THRESHOLD

public static final double DEFAULT_COMPLEMENT_THRESHOLD
Default threshold for using the complements optimization. If accumulating facets for a document set larger than this ratio of the index size than perform the complement optimization.

See Also:
for more info on the complements optimization., Constant Field Values

DISABLE_COMPLEMENT

public static final double DISABLE_COMPLEMENT
Passing this to setComplementThreshold(double) will disable using complement optimization.

See Also:
Constant Field Values

FORCE_COMPLEMENT

public static final double FORCE_COMPLEMENT
Passing this to setComplementThreshold(double) will force using complement optimization.

See Also:
Constant Field Values

taxonomyReader

protected final TaxonomyReader taxonomyReader

indexReader

protected final IndexReader indexReader

searchParams

protected FacetSearchParams searchParams
Constructor Detail

FacetsAccumulator

public FacetsAccumulator(FacetSearchParams searchParams,
                         IndexReader indexReader,
                         TaxonomyReader taxonomyReader)
Method Detail

accumulate

public abstract List<FacetResult> accumulate(ScoredDocIDs docids)
                                      throws IOException
Accumulate facets over given documents, according to facet requests in effect.

Parameters:
docids - documents (and their scores) for which facets are Accumulated.
Returns:
Accumulated facets.
Throws:
IOException - on error.

getComplementThreshold

public double getComplementThreshold()
Returns:
the complement threshold
See Also:
setComplementThreshold(double)

setComplementThreshold

public void setComplementThreshold(double complementThreshold)
Set the complement threshold. This threshold will dictate whether the complements optimization is applied. The optimization is to count for less documents. It is useful when the same FacetSearchParams are used for varying sets of documents. The first time complements is used the "total counts" are computed - counting for all the documents in the collection. Then, only the complementing set of documents is considered, and used to decrement from the overall counts, thereby walking through less documents, which is faster.

Note that this optimization is only available when searching an index whose IndexReader implements both IndexReader.directory() and IndexReader.getVersion() otherwise the optimization is silently disabled regardless of the complement threshold settings.

For the default settings see DEFAULT_COMPLEMENT_THRESHOLD.

To forcing complements in all cases pass FORCE_COMPLEMENT. This is mostly useful for testing purposes, as forcing complements when only tiny fraction of available documents match the query does not make sense and would incur performance degradations.

To disable complements pass DISABLE_COMPLEMENT.

Parameters:
complementThreshold - the complement threshold to set

isAllowLabeling

protected boolean isAllowLabeling()
Check if labeling is allowed for this accumulator.

By default labeling is allowed. This allows one accumulator to invoke other accumulators for accumulation but keep to itself the responsibility of labeling. This might br handy since labeling is a costly operation.

Returns:
true of labeling is allowed for this accumulator
See Also:
setAllowLabeling(boolean)

setAllowLabeling

protected void setAllowLabeling(boolean allowLabeling)
Set whether labeling is allowed for this accumulator.

Parameters:
allowLabeling - new setting for allow labeling
See Also:
isAllowLabeling()

mayComplement

protected boolean mayComplement()
check if all requests are complementable