You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by cp...@apache.org on 2024/02/21 17:33:29 UTC
(solr) branch jira/solr-13350 updated: factor out SolrMultiCollectorManager.scoreMode method
This is an automated email from the ASF dual-hosted git repository.
cpoerschke pushed a commit to branch jira/solr-13350
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/jira/solr-13350 by this push:
new ab895b101a0 factor out SolrMultiCollectorManager.scoreMode method
ab895b101a0 is described below
commit ab895b101a0626f0d393d2564e289d31ddb6cc63
Author: Christine Poerschke <cp...@apache.org>
AuthorDate: Wed Feb 21 17:32:57 2024 +0000
factor out SolrMultiCollectorManager.scoreMode method
---
.../org/apache/solr/search/SolrIndexSearcher.java | 40 ++++++++++++++--------
.../solr/search/SolrMultiCollectorManager.java | 23 ++++++++-----
2 files changed, 39 insertions(+), 24 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
index ac73ff34a4b..ae9833d3bfd 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
@@ -1972,7 +1972,25 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
throws IOException {
Collection<CollectorManager<Collector, Object>> collectors = new ArrayList<>();
- Collector[] firstCollectors = new Collector[3];
+ int firstCollectorsSize = 0;
+
+ final int firstTopDocsCollectorIndex;
+ if (needTopDocs) {
+ firstTopDocsCollectorIndex = firstCollectorsSize;
+ firstCollectorsSize++;
+ } else {
+ firstTopDocsCollectorIndex = -1;
+ }
+
+ final int firstMaxScoreCollectorIndex;
+ if (needMaxScore) {
+ firstMaxScoreCollectorIndex = firstCollectorsSize;
+ firstCollectorsSize++;
+ } else {
+ firstMaxScoreCollectorIndex = -1;
+ }
+
+ Collector[] firstCollectors = new Collector[firstCollectorsSize];
if (needTopDocs) {
@@ -1982,8 +2000,8 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
public Collector newCollector() throws IOException {
@SuppressWarnings("rawtypes")
TopDocsCollector collector = buildTopDocsCollector(len, cmd);
- if (firstCollectors[0] == null) {
- firstCollectors[0] = collector;
+ if (firstCollectors[firstTopDocsCollectorIndex] == null) {
+ firstCollectors[firstTopDocsCollectorIndex] = collector;
}
return collector;
}
@@ -2029,8 +2047,8 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
@Override
public Collector newCollector() throws IOException {
MaxScoreCollector collector = new MaxScoreCollector();
- if (firstCollectors[1] == null) {
- firstCollectors[1] = collector;
+ if (firstCollectors[firstMaxScoreCollectorIndex] == null) {
+ firstCollectors[firstMaxScoreCollectorIndex] = collector;
}
return collector;
}
@@ -2079,6 +2097,7 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
}
log.error("new docset collector for {} max={}", numDocs, maxDoc());
+ // TODO: add to firstCollectors here? or if not have comment w.r.t. why not adding
return new ThreadSafeBitSetCollector(bits, maxDoc);
}
@@ -2110,16 +2129,7 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
}
}
- ScoreMode scoreMode = null;
- for (Collector collector : firstCollectors) {
- if (collector != null) {
- if (scoreMode == null) {
- scoreMode = collector.scoreMode();
- } else if (scoreMode != collector.scoreMode()) {
- scoreMode = ScoreMode.COMPLETE;
- }
- }
- }
+ ScoreMode scoreMode = SolrMultiCollectorManager.scoreMode(firstCollectors);
return new SearchResult(scoreMode, ret);
}
diff --git a/solr/core/src/java/org/apache/solr/search/SolrMultiCollectorManager.java b/solr/core/src/java/org/apache/solr/search/SolrMultiCollectorManager.java
index deee75db361..e2b7e6fe7af 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrMultiCollectorManager.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrMultiCollectorManager.java
@@ -66,6 +66,19 @@ public class SolrMultiCollectorManager
return results;
}
+ // TODO: could Lucene's MultiCollector permit reuse of its logic?
+ public static ScoreMode scoreMode(Collector[] collectors) {
+ ScoreMode scoreMode = null;
+ for (Collector collector : collectors) {
+ if (scoreMode == null) {
+ scoreMode = collector.scoreMode();
+ } else if (scoreMode != collector.scoreMode()) {
+ return ScoreMode.COMPLETE;
+ }
+ }
+ return scoreMode;
+ }
+
/** Wraps multiple collectors for processing */
class Collectors implements Collector {
@@ -85,15 +98,7 @@ public class SolrMultiCollectorManager
@Override
public final ScoreMode scoreMode() {
- ScoreMode scoreMode = null;
- for (Collector collector : collectors) {
- if (scoreMode == null) {
- scoreMode = collector.scoreMode();
- } else if (scoreMode != collector.scoreMode()) {
- return ScoreMode.COMPLETE;
- }
- }
- return scoreMode;
+ return SolrMultiCollectorManager.scoreMode(collectors);
}
/**