Class DrillSideways
DrillDownQuery
. 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 provided DrillDownQuery
). 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 an IndexSearcher
constructed
with an Executor
).
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 ClassesModifier and TypeClassDescriptionstatic class
static class
static final record
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final FacetsConfig
FacetsConfig
passed to constructor.protected final IndexSearcher
IndexSearcher
passed to constructor.protected final SortedSetDocValuesReaderState
SortedSetDocValuesReaderState
passed to constructor; can be null.protected final TaxonomyReader
TaxonomyReader
passed to constructor. -
Constructor Summary
ConstructorsConstructorDescriptionDrillSideways
(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
Modifier and TypeMethodDescriptionprotected Facets
buildFacetsResult
(FacetsCollector drillDowns, FacetsCollector[] drillSideways, String[] drillSidewaysDims) Subclass can override to customize per-dim Facets impl.protected FacetsCollectorManager
Subclass can override to customize drill down facets collector.protected FacetsCollectorManager
Subclass can override to customize drill sideways facets collector.protected boolean
Override this and return true if your collector (e.g.,ToParentBlockJoinCollector
) expects all sub-scorers to be positioned on the document being collected.search
(DrillDownQuery query, int topN) Search, sorting by score, and computing drill down and sideways counts.search
(DrillDownQuery query, CollectorManager<?, R> hitCollectorManager) Runs a search, using aCollectorManager
to gather and merge search results<C extends Collector,
T, K extends Collector, R>
DrillSideways.Result<T, R> search
(DrillDownQuery query, CollectorManager<C, T> drillDownCollectorManager, List<? extends CollectorManager<K, R>> drillSidewaysCollectorManagers) Search using DrillDownQuery with custom collectors.search
(DrillDownQuery query, Query filter, FieldDoc after, int topN, Sort sort, boolean doDocScores) Search, sorting bySort
, and computing drill down and sideways counts.search
(ScoreDoc after, DrillDownQuery query, int topN) Search, sorting by score, and computing drill down and sideways counts.
-
Field Details
-
searcher
IndexSearcher
passed to constructor. -
taxoReader
TaxonomyReader
passed to constructor. -
state
SortedSetDocValuesReaderState
passed to constructor; can be null. -
config
FacetsConfig
passed to constructor.
-
-
Constructor Details
-
DrillSideways
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 Details
-
createDrillDownFacetsCollectorManager
Subclass can override to customize drill down facets collector. Returningnull
is valid if no drill down facet collection is needed. -
createDrillSidewaysFacetsCollectorManager
Subclass can override to customize drill sideways facets collector. This should not returnnull
as we assume drill sideways is being used to collect "sideways" hits: -
buildFacetsResult
protected Facets buildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, String[] drillSidewaysDims) throws IOException Subclass can override to customize per-dim Facets impl.- 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
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 IOExceptionRuns a search, using aCollectorManager
to gather and merge search results- Throws:
IOException
-
search
public <C extends Collector,T, DrillSideways.Result<T,K extends Collector, R> R> search(DrillDownQuery query, CollectorManager<C, T> drillDownCollectorManager, List<? extends CollectorManager<K, throws IOExceptionR>> drillSidewaysCollectorManagers) Search using DrillDownQuery with custom collectors. This method can be used with anyCollectorManager
s.Note: Use
MultiCollectorManager
to collect both hits and facets for the entire query and/or for drill-sideways dimensions. You can also use it to wrap different types ofCollectorManager
for drill-sideways dimensions.- Throws:
IOException
-