msfroh commented on code in PR #13747:
URL: https://github.com/apache/lucene/pull/13747#discussion_r1752887025


##########
lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java:
##########
@@ -530,49 +528,104 @@ public static Query createJoinQuery(
 
     final Query rewrittenFromQuery = searcher.rewrite(fromQuery);
     final Query rewrittenToQuery = searcher.rewrite(toQuery);
-    GlobalOrdinalsWithScoreCollector globalOrdinalsWithScoreCollector;
+    Supplier<GlobalOrdinalsWithScoreCollector> 
globalOrdinalsWithScoreCollector;
+    final OrdinalMap finalOrdinalMap = ordinalMap;
     switch (scoreMode) {
       case Total:
         globalOrdinalsWithScoreCollector =
-            new GlobalOrdinalsWithScoreCollector.Sum(joinField, ordinalMap, 
valueCount, min, max);
+            () ->
+                new GlobalOrdinalsWithScoreCollector.Sum(
+                    joinField, finalOrdinalMap, valueCount, min, max);
         break;
       case Min:
         globalOrdinalsWithScoreCollector =
-            new GlobalOrdinalsWithScoreCollector.Min(joinField, ordinalMap, 
valueCount, min, max);
+            () ->
+                new GlobalOrdinalsWithScoreCollector.Min(
+                    joinField, finalOrdinalMap, valueCount, min, max);
         break;
       case Max:
         globalOrdinalsWithScoreCollector =
-            new GlobalOrdinalsWithScoreCollector.Max(joinField, ordinalMap, 
valueCount, min, max);
+            () ->
+                new GlobalOrdinalsWithScoreCollector.Max(
+                    joinField, finalOrdinalMap, valueCount, min, max);
         break;
       case Avg:
         globalOrdinalsWithScoreCollector =
-            new GlobalOrdinalsWithScoreCollector.Avg(joinField, ordinalMap, 
valueCount, min, max);
+            () ->
+                new GlobalOrdinalsWithScoreCollector.Avg(
+                    joinField, finalOrdinalMap, valueCount, min, max);
         break;
       case None:
         if (min <= 1 && max == Integer.MAX_VALUE) {
-          GlobalOrdinalsCollector globalOrdinalsCollector =
-              new GlobalOrdinalsCollector(joinField, ordinalMap, valueCount);
-          searcher.search(rewrittenFromQuery, globalOrdinalsCollector);
+          LongBitSet collectedOrdinals =
+              searcher.search(
+                  rewrittenFromQuery,
+                  new CollectorManager<GlobalOrdinalsCollector, LongBitSet>() {

Review Comment:
   Good idea!
   
   I've created a new `MergeableCollector` interface that adds a `merge` method 
to `Collector`. Then we can reuse a `MergeableCollectorManager` to fold all 
results into a single collector in the `reduce` step. At the very least, I can 
use it for the two cases in this method (`GlobalOrdinalsCollector` and 
`GlobalOrdinalsWithScoreCollector`). I should be able to use them once I tackle 
the terms and numeric collectors.
   
   I've kept them package-private for now, so I can use them throughout the 
`join` module. I don't know if anyone else wants to implement `reduce` as a 
pair-wise merge. (Most of the existing `reduce` implementations just do an 
N-way merge.)



-- 
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.

To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to