You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ja...@apache.org on 2024/08/29 08:53:59 UTC

(lucene) branch main updated: Udpate ReadTask to not rely on search(Query, Collector) (#13602)

This is an automated email from the ASF dual-hosted git repository.

javanna pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/lucene.git


The following commit(s) were added to refs/heads/main by this push:
     new 9172cc42472 Udpate ReadTask to not rely on search(Query, Collector) (#13602)
9172cc42472 is described below

commit 9172cc42472a55a5f991318a081972ee16b7f186
Author: Luca Cavanna <ja...@apache.org>
AuthorDate: Thu Aug 29 10:53:53 2024 +0200

    Udpate ReadTask to not rely on search(Query, Collector) (#13602)
    
    This commit modifies ReadTask to no longer call the deprecated search(Query, Collector).
    Instead, it creates a collector manager and calls search(Query, CollectorManager).
    
    The existing protected createCollector method is removed in favour of createCollectorManager that returns
    now a CollectorManager in place of a Collector.
    
    SearchWithCollectorTask works the same way if "topScoreDoc" is provided as config. Loading of a custom collector
    will no longer work, and needs to be replaced with loading a collector manager by class name instead.
---
 lucene/CHANGES.txt                                 |  3 +++
 lucene/benchmark/conf/collector-small.alg          |  9 ++++-----
 lucene/benchmark/conf/collector.alg                |  9 ++++-----
 .../lucene/benchmark/byTask/tasks/ReadTask.java    | 11 ++++-------
 .../byTask/tasks/SearchWithCollectorTask.java      | 23 ++++++++++++----------
 5 files changed, 28 insertions(+), 27 deletions(-)

diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 313032edb4d..e956c99289f 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -218,6 +218,9 @@ Changes in Backwards Compatibility Policy
 * GITHUB#13230: Remove the Kp and Lovins snowball algorithms which are not supported
   or intended for general use. (Robert Muir)
 
+* GITHUB#13602: SearchWithCollectorTask no longer supports the `collector.class` config parameter to load a custom
+  collector implementation. `collector.manager.class` allows users to load a collector manager instead. (Luca Cavanna)
+
 Other
 ---------------------
 
diff --git a/lucene/benchmark/conf/collector-small.alg b/lucene/benchmark/conf/collector-small.alg
index e57ee8646b1..7d312d4f243 100644
--- a/lucene/benchmark/conf/collector-small.alg
+++ b/lucene/benchmark/conf/collector-small.alg
@@ -17,11 +17,10 @@
 # -------------------------------------------------------------------------------------
 # multi val params are iterated by NewRound's, added to reports, start with column name.
 
-# collector.class can be:
-#    Fully Qualified Class Name of a Collector with a empty constructor
-#    topScoreDocOrdered - Creates a TopScoreDocCollector that requires in order docs
-#    topScoreDocUnordered - Like above, but allows out of order
-collector.class=coll:topScoreDoc
+# collector.manager.class can be:
+#    Fully Qualified Class Name of a CollectorManager with a empty constructor
+#    topScoreDoc - Creates a TopScoreDocCollectorManager
+collector.manager.class=coll:topScoreDoc
 
 analyzer=org.apache.lucene.analysis.core.WhitespaceAnalyzer
 directory=FSDirectory
diff --git a/lucene/benchmark/conf/collector.alg b/lucene/benchmark/conf/collector.alg
index e2843492dca..96873b9402f 100644
--- a/lucene/benchmark/conf/collector.alg
+++ b/lucene/benchmark/conf/collector.alg
@@ -17,11 +17,10 @@
 # -------------------------------------------------------------------------------------
 # multi val params are iterated by NewRound's, added to reports, start with column name.
 
-# collector.class can be:
-#    Fully Qualified Class Name of a Collector with a empty constructor
-#    topScoreDocOrdered - Creates a TopScoreDocCollector that requires in order docs
-#    topScoreDocUnordered - Like above, but allows out of order
-collector.class=coll:topScoreDoc
+# collector.manager.class can be:
+#    Fully Qualified Class Name of a CollectorManager with a empty constructor
+#    topScoreDoc - Creates a TopScoreDocCollectorManager
+collector.manager.class=coll:topScoreDoc
 
 analyzer=org.apache.lucene.analysis.core.WhitespaceAnalyzer
 directory=FSDirectory
diff --git a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/ReadTask.java b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/ReadTask.java
index 58cf8e79efa..a9465e5d12f 100644
--- a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/ReadTask.java
+++ b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/ReadTask.java
@@ -24,7 +24,7 @@ import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.MultiBits;
 import org.apache.lucene.index.StoredFields;
-import org.apache.lucene.search.Collector;
+import org.apache.lucene.search.CollectorManager;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.ScoreDoc;
@@ -119,9 +119,7 @@ public abstract class ReadTask extends PerfTask {
             hits = searcher.search(q, numHits);
           }
         } else {
-          Collector collector = createCollector();
-
-          searcher.search(q, collector);
+          searcher.search(q, createCollectorManager());
           // hits = collector.topDocs();
         }
 
@@ -184,9 +182,8 @@ public abstract class ReadTask extends PerfTask {
     return res;
   }
 
-  protected Collector createCollector() throws Exception {
-    return new TopScoreDocCollectorManager(numHits(), withTotalHits() ? Integer.MAX_VALUE : 1)
-        .newCollector();
+  protected CollectorManager<?, ?> createCollectorManager() throws Exception {
+    return new TopScoreDocCollectorManager(numHits(), withTotalHits() ? Integer.MAX_VALUE : 1);
   }
 
   protected Document retrieveDoc(StoredFields storedFields, int id) throws IOException {
diff --git a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithCollectorTask.java b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithCollectorTask.java
index f41994f48d6..c753ccde65a 100644
--- a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithCollectorTask.java
+++ b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithCollectorTask.java
@@ -19,7 +19,7 @@ package org.apache.lucene.benchmark.byTask.tasks;
 import org.apache.lucene.benchmark.byTask.PerfRunData;
 import org.apache.lucene.benchmark.byTask.feeds.QueryMaker;
 import org.apache.lucene.benchmark.byTask.utils.Config;
-import org.apache.lucene.search.Collector;
+import org.apache.lucene.search.CollectorManager;
 import org.apache.lucene.search.TopScoreDocCollectorManager;
 
 /** Does search w/ a custom collector */
@@ -37,7 +37,11 @@ public class SearchWithCollectorTask extends SearchTask {
     // check to make sure either the doc is being stored
     PerfRunData runData = getRunData();
     Config config = runData.getConfig();
-    clnName = config.get("collector.class", "");
+    if (config.get("collector.class", null) != null) {
+      throw new IllegalArgumentException(
+          "collector.class is no longer supported as a config parameter, use collector.manager.class instead to provide a CollectorManager class name");
+    }
+    clnName = config.get("collector.manager.class", "");
   }
 
   @Override
@@ -46,18 +50,17 @@ public class SearchWithCollectorTask extends SearchTask {
   }
 
   @Override
-  protected Collector createCollector() throws Exception {
-    Collector collector = null;
+  protected CollectorManager<?, ?> createCollectorManager() throws Exception {
+    CollectorManager<?, ?> collectorManager;
     if (clnName.equalsIgnoreCase("topScoreDoc") == true) {
-      collector =
-          new TopScoreDocCollectorManager(numHits(), null, Integer.MAX_VALUE, false).newCollector();
+      collectorManager = new TopScoreDocCollectorManager(numHits(), Integer.MAX_VALUE);
     } else if (clnName.length() > 0) {
-      collector = Class.forName(clnName).asSubclass(Collector.class).getConstructor().newInstance();
-
+      collectorManager =
+          Class.forName(clnName).asSubclass(CollectorManager.class).getConstructor().newInstance();
     } else {
-      collector = super.createCollector();
+      collectorManager = super.createCollectorManager();
     }
-    return collector;
+    return collectorManager;
   }
 
   @Override