Class DrillSideways
- java.lang.Object
-
- org.apache.lucene.facet.DrillSideways
-
public class DrillSideways extends Object
Computes drill down and sideways counts for the providedDrillDownQuery
. Drill sideways counts include alternative values/aggregates for the drill-down dimensions so that a dimension does not disappear after the user drills down into it.Use one of the static search methods to do the search, and then get the hits and facet results from the returned
DrillSideways.DrillSidewaysResult
.There is both a "standard" and "concurrent" implementation for drill sideways. The concurrent approach is enabled by providing an
ExecutorService
to the ctor. The concurrent implementation may be a little faster but does duplicate work (which grows linearly with the number of drill down dimensions specified on the providedDrillDownQuery
). The duplicate work may impact the overall throughput of a system. The standard approach may be a little slower but avoids duplicate computations and query processing. Note that both approaches are compatible with concurrent searching across segments (i.e., if using anIndexSearcher
constructed with anExecutor
).NOTE: this allocates one
FacetsCollector
for each drill-down, plus one. If your index has high number of facet labels then this will multiply your memory usage.- WARNING: This API is experimental and might change in incompatible ways in the next release.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
DrillSideways.ConcurrentDrillSidewaysResult<R>
static class
DrillSideways.DrillSidewaysResult
-
Field Summary
Fields Modifier and Type Field Description protected FacetsConfig
config
FacetsConfig
passed to constructor.protected IndexSearcher
searcher
IndexSearcher
passed to constructor.protected SortedSetDocValuesReaderState
state
SortedSetDocValuesReaderState
passed to constructor; can be null.protected TaxonomyReader
taxoReader
TaxonomyReader
passed to constructor.
-
Constructor Summary
Constructors Constructor Description DrillSideways(IndexSearcher searcher, FacetsConfig config, SortedSetDocValuesReaderState state)
Create a newDrillSideways
instance, assuming the categories were indexed withSortedSetDocValuesFacetField
.DrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader)
Create a newDrillSideways
instance.DrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader, SortedSetDocValuesReaderState state)
Create a newDrillSideways
instance, where some dimensions were indexed withSortedSetDocValuesFacetField
and others were indexed withFacetField
.DrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader, SortedSetDocValuesReaderState state, ExecutorService executor)
Create a newDrillSideways
instance, where some dimensions were indexed withSortedSetDocValuesFacetField
and others were indexed withFacetField
.
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected Facets
buildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, String[] drillSidewaysDims)
Subclass can override to customize per-dim Facets impl.protected FacetsCollector
createDrillDownFacetsCollector()
Subclass can override to customize drill down facets collector.protected FacetsCollectorManager
createDrillDownFacetsCollectorManager()
Subclass can override to customize drill down facets collector.protected boolean
scoreSubDocsAtOnce()
Override this and return true if your collector (e.g.,ToParentBlockJoinCollector
) expects all sub-scorers to be positioned on the document being collected.DrillSideways.DrillSidewaysResult
search(DrillDownQuery query, int topN)
Search, sorting by score, and computing drill down and sideways counts.DrillSideways.DrillSidewaysResult
search(DrillDownQuery query, Collector hitCollector)
Deprecated.This method is deprecated in interest of thesearch(DrillDownQuery, CollectorManager)
method.<R> DrillSideways.ConcurrentDrillSidewaysResult<R>
search(DrillDownQuery query, CollectorManager<?,R> hitCollectorManager)
Runs a search, using aCollectorManager
to gather and merge search resultsDrillSideways.DrillSidewaysResult
search(DrillDownQuery query, Query filter, FieldDoc after, int topN, Sort sort, boolean doDocScores)
Search, sorting bySort
, and computing drill down and sideways counts.DrillSideways.DrillSidewaysResult
search(ScoreDoc after, DrillDownQuery query, int topN)
Search, sorting by score, and computing drill down and sideways counts.
-
-
-
Field Detail
-
searcher
protected final IndexSearcher searcher
IndexSearcher
passed to constructor.
-
taxoReader
protected final TaxonomyReader taxoReader
TaxonomyReader
passed to constructor.
-
state
protected final SortedSetDocValuesReaderState state
SortedSetDocValuesReaderState
passed to constructor; can be null.
-
config
protected final FacetsConfig config
FacetsConfig
passed to constructor.
-
-
Constructor Detail
-
DrillSideways
public DrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader)
Create a newDrillSideways
instance.
-
DrillSideways
public DrillSideways(IndexSearcher searcher, FacetsConfig config, SortedSetDocValuesReaderState state)
Create a newDrillSideways
instance, assuming the categories were indexed withSortedSetDocValuesFacetField
.
-
DrillSideways
public DrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader, SortedSetDocValuesReaderState state)
Create a newDrillSideways
instance, where some dimensions were indexed withSortedSetDocValuesFacetField
and others were indexed withFacetField
.
-
DrillSideways
public DrillSideways(IndexSearcher searcher, FacetsConfig config, TaxonomyReader taxoReader, SortedSetDocValuesReaderState state, ExecutorService executor)
Create a newDrillSideways
instance, where some dimensions were indexed withSortedSetDocValuesFacetField
and others were indexed withFacetField
.Use this constructor to use the concurrent implementation
-
-
Method Detail
-
createDrillDownFacetsCollector
protected FacetsCollector createDrillDownFacetsCollector()
Subclass can override to customize drill down facets collector. Returningnull
is valid if no drill down facet collection is needed.
-
createDrillDownFacetsCollectorManager
protected FacetsCollectorManager createDrillDownFacetsCollectorManager()
Subclass can override to customize drill down facets collector. Returningnull
is valid if no drill down facet collection is needed.
-
buildFacetsResult
protected Facets buildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, String[] drillSidewaysDims) throws IOException
Subclass can override to customize per-dim Facets impl.- Throws:
IOException
-
search
@Deprecated public DrillSideways.DrillSidewaysResult search(DrillDownQuery query, Collector hitCollector) throws IOException
Deprecated.This method is deprecated in interest of thesearch(DrillDownQuery, CollectorManager)
method.Search, collecting hits with aCollector
, and computing drill down and sideways counts.Note that "concurrent" drill sideways will not be invoked here, even if an
ExecutorService
was supplied to the ctor, sinceCollector
s are not thread-safe. If interested in concurrent drill sideways, please use one of the other staticsearch
methods.- Throws:
IOException
-
search
public DrillSideways.DrillSidewaysResult search(DrillDownQuery query, Query filter, FieldDoc after, int topN, Sort sort, boolean doDocScores) throws IOException
Search, sorting bySort
, and computing drill down and sideways counts.- Throws:
IOException
-
search
public DrillSideways.DrillSidewaysResult search(DrillDownQuery query, int topN) throws IOException
Search, sorting by score, and computing drill down and sideways counts.- Throws:
IOException
-
search
public DrillSideways.DrillSidewaysResult search(ScoreDoc after, DrillDownQuery query, int topN) throws IOException
Search, sorting by score, and computing drill down and sideways counts.- Throws:
IOException
-
scoreSubDocsAtOnce
protected boolean scoreSubDocsAtOnce()
Override this and return true if your collector (e.g.,ToParentBlockJoinCollector
) expects all sub-scorers to be positioned on the document being collected. This will cause some performance loss; default is false.
-
search
public <R> DrillSideways.ConcurrentDrillSidewaysResult<R> search(DrillDownQuery query, CollectorManager<?,R> hitCollectorManager) throws IOException
Runs a search, using aCollectorManager
to gather and merge search results- Throws:
IOException
-
-