gsmiller commented on a change in pull request #142:
URL: https://github.com/apache/lucene/pull/142#discussion_r639646070
##########
File path: lucene/facet/src/java/org/apache/lucene/facet/DrillSidewaysQuery.java
##########
@@ -40,21 +41,65 @@
// TODO change the way DrillSidewaysScorer is used, this query does not work
// with filter caching
class DrillSidewaysQuery extends Query {
+
final Query baseQuery;
- final Collector drillDownCollector;
- final Collector[] drillSidewaysCollectors;
+
+ // The caller must either directly provide FacetsCollectors for the drill
down and sideways
+ // collecting, or provide FacetsCollectorManagers used to create the
FacetsCollectors. If
+ // this query will be executed concurrently, FacetsCollectorManagers should
be used to ensure
+ // multiple threads aren't collecting into the same FacetsCollector.
+ final FacetsCollector drillDownCollector;
+ final FacetsCollector[] drillSidewaysCollectors;
+ final FacetsCollectorManager drillDownCollectorManager;
+ final FacetsCollectorManager[] drillSidewaysCollectorManagers;
+ final List<FacetsCollector> managedDrillDownCollectors;
+ final List<FacetsCollector[]> managedDrillSidewaysCollectors;
+
final Query[] drillDownQueries;
+
final boolean scoreSubDocsAtOnce;
+ /**
+ * Construct a new {@code DrillSidewaysQuery} that will directly use the
provided {@link
+ * FacetsCollector}s. Use this if you're certain that the query will not be
executed concurrently.
Review comment:
Since this class is package-private and I think it makes sense to
consolidate it to always use `FacetsCollectorManager` (as per your suggestion),
I think I'll add some detailed documentation on the `DrillSideways` class to
describe the trade-off of providing an `ExecutorService` or not. This is what
triggers the "concurrent drill sideways" implementation. The short version
though is that the concurrent approach to DS will do lots of duplicate work but
may be slightly faster, where as the "sequential" version doesn't do any
duplicate query processing/computation. It gets extra confusing because both
the "sequential" and "concurrent" approaches can still work with concurrent
query execution if using a `CollectorManager` + `IndexSearcher` with an
`Executor`. It's a little tricky to describe but I'll take a shot at it.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]