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

ishan 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 d8b371c15f5 ./gradlew tidy again
d8b371c15f5 is described below

commit d8b371c15f5a5d2a18362a7109ad7538b01d3b95
Author: Ishan Chattopadhyaya <[email protected]>
AuthorDate: Tue Apr 9 13:14:23 2024 +0530

    ./gradlew tidy again
---
 .../java/org/apache/solr/core/CoreContainer.java   |  26 +-
 .../apache/solr/search/MultiThreadedSearcher.java  | 573 ++++++++++-----------
 .../org/apache/solr/search/SolrIndexSearcher.java  |  10 +-
 3 files changed, 305 insertions(+), 304 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java 
b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 706935ecc14..cceeb23a526 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -51,9 +51,9 @@ import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.TimeoutException;
 import java.util.concurrent.RejectedExecutionHandler;
 import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeoutException;
 import java.util.function.Function;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
@@ -447,17 +447,19 @@ public class CoreContainer {
             cfg.getIndexSearcherExecutorThreads(), // thread count
             cfg.getIndexSearcherExecutorThreads(), // queue size
             new SolrNamedThreadFactory("searcherCollector"));
-    ((ExecutorUtil.MDCAwareThreadPoolExecutor) 
collectorExecutor).setRejectedExecutionHandler(new RejectedExecutionHandler() {
-      @Override
-      public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
-        if (!executor.isShutdown()) {
-          try {
-            executor.getQueue().put(r);
-          } catch (InterruptedException e) {
-          }
-        }
-      }
-    });
+    ((ExecutorUtil.MDCAwareThreadPoolExecutor) collectorExecutor)
+        .setRejectedExecutionHandler(
+            new RejectedExecutionHandler() {
+              @Override
+              public void rejectedExecution(Runnable r, ThreadPoolExecutor 
executor) {
+                if (!executor.isShutdown()) {
+                  try {
+                    executor.getQueue().put(r);
+                  } catch (InterruptedException e) {
+                  }
+                }
+              }
+            });
   }
 
   @SuppressWarnings({"unchecked"})
diff --git 
a/solr/core/src/java/org/apache/solr/search/MultiThreadedSearcher.java 
b/solr/core/src/java/org/apache/solr/search/MultiThreadedSearcher.java
index 868733f808f..290ec41520a 100644
--- a/solr/core/src/java/org/apache/solr/search/MultiThreadedSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/MultiThreadedSearcher.java
@@ -16,6 +16,14 @@
  */
 package org.apache.solr.search;
 
+import java.io.IOException;
+import java.lang.invoke.MethodHandles;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.concurrent.ExecutionException;
+import java.util.function.Supplier;
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.BooleanClause;
@@ -34,356 +42,345 @@ import org.apache.solr.search.join.GraphQuery;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.lang.invoke.MethodHandles;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.concurrent.ExecutionException;
-import java.util.function.Supplier;
-
 public class MultiThreadedSearcher {
-    private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-    final SolrIndexSearcher searcher;
+  private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  final SolrIndexSearcher searcher;
+
+  public MultiThreadedSearcher(SolrIndexSearcher searcher) {
+    this.searcher = searcher;
+  }
+
+  SearchResult searchCollectorManagers(
+      int len,
+      QueryCommand cmd,
+      Query query,
+      boolean needTopDocs,
+      boolean needMaxScore,
+      boolean needDocSet)
+      throws IOException {
+    Collection<CollectorManager<Collector, Object>> collectors = new 
ArrayList<>();
+
+    int firstCollectorsSize = 0;
+
+    final int firstTopDocsCollectorIndex;
+    if (needTopDocs) {
+      firstTopDocsCollectorIndex = firstCollectorsSize;
+      firstCollectorsSize++;
+    } else {
+      firstTopDocsCollectorIndex = -1;
+    }
 
-    public MultiThreadedSearcher(SolrIndexSearcher searcher) {
-        this.searcher = searcher;
+    final int firstMaxScoreCollectorIndex;
+    if (needMaxScore) {
+      firstMaxScoreCollectorIndex = firstCollectorsSize;
+      firstCollectorsSize++;
+    } else {
+      firstMaxScoreCollectorIndex = -1;
     }
 
-    SearchResult searchCollectorManagers(
-            int len,
-            QueryCommand cmd,
-            Query query,
-            boolean needTopDocs,
-            boolean needMaxScore,
-            boolean needDocSet)
-            throws IOException {
-        Collection<CollectorManager<Collector, Object>> collectors = new 
ArrayList<>();
+    Collector[] firstCollectors = new Collector[firstCollectorsSize];
 
-        int firstCollectorsSize = 0;
+    if (needTopDocs) {
 
-        final int firstTopDocsCollectorIndex;
-        if (needTopDocs) {
-            firstTopDocsCollectorIndex = firstCollectorsSize;
-            firstCollectorsSize++;
-        } else {
-            firstTopDocsCollectorIndex = -1;
-        }
+      collectors.add(new TopDocsCM(len, cmd, firstCollectors, 
firstTopDocsCollectorIndex));
+    }
+    if (needMaxScore) {
+      collectors.add(new MaxScoreCM(firstCollectors, 
firstMaxScoreCollectorIndex));
+    }
+    if (needDocSet) {
+      int maxDoc = searcher.getRawReader().maxDoc();
+      log.error("raw read max={}", searcher.getRawReader().maxDoc());
 
-        final int firstMaxScoreCollectorIndex;
-        if (needMaxScore) {
-            firstMaxScoreCollectorIndex = firstCollectorsSize;
-            firstCollectorsSize++;
-        } else {
-            firstMaxScoreCollectorIndex = -1;
-        }
+      collectors.add(new DocSetCM(maxDoc));
+    }
 
-        Collector[] firstCollectors = new Collector[firstCollectorsSize];
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    CollectorManager<Collector, Object>[] colls = collectors.toArray(new 
CollectorManager[0]);
+    SolrMultiCollectorManager manager = new SolrMultiCollectorManager(colls);
+    Object[] ret;
+    try {
+      ret = searcher.search(query, manager);
+    } catch (Exception ex) {
+      if (ex instanceof RuntimeException
+          && ex.getCause() != null
+          && ex.getCause() instanceof ExecutionException
+          && ex.getCause().getCause() != null
+          && ex.getCause().getCause() instanceof RuntimeException) {
+        throw (RuntimeException) ex.getCause().getCause();
+      } else {
+        throw ex;
+      }
+    }
 
-        if (needTopDocs) {
+    ScoreMode scoreMode = SolrMultiCollectorManager.scoreMode(firstCollectors);
 
-            collectors.add(
-                    new TopDocsCM(len, cmd, firstCollectors, 
firstTopDocsCollectorIndex));
-        }
-        if (needMaxScore) {
-            collectors.add(
-                    new MaxScoreCM(firstCollectors, 
firstMaxScoreCollectorIndex));
-        }
-        if (needDocSet) {
-            int maxDoc = searcher.getRawReader().maxDoc();
-            log.error("raw read max={}", searcher.getRawReader().maxDoc());
+    return new SearchResult(scoreMode, ret);
+  }
 
-            collectors.add(
-                    new DocSetCM(maxDoc));
-        }
+  static boolean allowMT(DelegatingCollector postFilter, QueryCommand cmd, 
Query query) {
+    if (postFilter != null || cmd.getSegmentTerminateEarly() || 
cmd.getTimeAllowed() > 0) {
+      return false;
+    } else {
+      MTCollectorQueryCheck allowMT = new MTCollectorQueryCheck();
+      query.visit(allowMT);
+      return allowMT.allowed();
+    }
+  }
 
-        @SuppressWarnings({"unchecked", "rawtypes"})
-        CollectorManager<Collector, Object>[] colls = collectors.toArray(new 
CollectorManager[0]);
-        SolrMultiCollectorManager manager = new 
SolrMultiCollectorManager(colls);
-        Object[] ret;
-        try {
-            ret = searcher.search(query, manager);
-        } catch (Exception ex) {
-            if (ex instanceof RuntimeException
-                    && ex.getCause() != null
-                    && ex.getCause() instanceof ExecutionException
-                    && ex.getCause().getCause() != null
-                    && ex.getCause().getCause() instanceof RuntimeException) {
-                throw (RuntimeException) ex.getCause().getCause();
-            } else {
-                throw ex;
-            }
-        }
+  /**
+   * A {@link QueryVisitor} that recurses through the query tree, determining 
if all queries support
+   * multi-threaded collecting.
+   */
+  private static class MTCollectorQueryCheck extends QueryVisitor {
 
-        ScoreMode scoreMode = 
SolrMultiCollectorManager.scoreMode(firstCollectors);
+    private QueryVisitor subVisitor = this;
 
-        return new SearchResult(scoreMode, ret);
+    private boolean allowMt(Query query) {
+      if (query instanceof RankQuery || query instanceof GraphQuery || query 
instanceof JoinQuery) {
+        return false;
+      }
+      return true;
     }
 
-     static boolean allowMT(DelegatingCollector postFilter, QueryCommand cmd, 
Query query) {
-        if (postFilter != null || cmd.getSegmentTerminateEarly() || 
cmd.getTimeAllowed() > 0) {
-            return false;
-        } else {
-            MTCollectorQueryCheck allowMT = new MTCollectorQueryCheck();
-            query.visit(allowMT);
-            return allowMT.allowed();
-        }
+    @Override
+    public void consumeTerms(Query query, Term... terms) {
+      if (!allowMt(query)) {
+        subVisitor = EMPTY_VISITOR;
+      }
     }
 
-    /**
-     * A {@link QueryVisitor} that recurses through the query tree, 
determining if all queries support
-     * multi-threaded collecting.
-     */
-    private static class MTCollectorQueryCheck extends QueryVisitor {
-
-        private QueryVisitor subVisitor = this;
-
-        private boolean allowMt(Query query) {
-            if (query instanceof RankQuery || query instanceof GraphQuery || 
query instanceof JoinQuery) {
-                return false;
-            }
-            return true;
-        }
-
-        @Override
-        public void consumeTerms(Query query, Term... terms) {
-            if (!allowMt(query)) {
-                subVisitor = EMPTY_VISITOR;
-            }
-        }
-
-        @Override
-        public void consumeTermsMatching(
-                Query query, String field, Supplier<ByteRunAutomaton> 
automaton) {
-            if (!allowMt(query)) {
-                subVisitor = EMPTY_VISITOR;
-            } else {
-                super.consumeTermsMatching(query, field, automaton);
-            }
-        }
+    @Override
+    public void consumeTermsMatching(
+        Query query, String field, Supplier<ByteRunAutomaton> automaton) {
+      if (!allowMt(query)) {
+        subVisitor = EMPTY_VISITOR;
+      } else {
+        super.consumeTermsMatching(query, field, automaton);
+      }
+    }
 
-        @Override
-        public void visitLeaf(Query query) {
-            if (!allowMt(query)) {
-                subVisitor = EMPTY_VISITOR;
-            }
-        }
+    @Override
+    public void visitLeaf(Query query) {
+      if (!allowMt(query)) {
+        subVisitor = EMPTY_VISITOR;
+      }
+    }
 
-        @Override
-        public QueryVisitor getSubVisitor(BooleanClause.Occur occur, Query 
parent) {
-            return subVisitor;
-        }
+    @Override
+    public QueryVisitor getSubVisitor(BooleanClause.Occur occur, Query parent) 
{
+      return subVisitor;
+    }
 
-        public boolean allowed() {
-            return subVisitor != EMPTY_VISITOR;
-        }
+    public boolean allowed() {
+      return subVisitor != EMPTY_VISITOR;
     }
+  }
 
-    static class MaxScoreResult {
-        final float maxScore;
+  static class MaxScoreResult {
+    final float maxScore;
 
-        public MaxScoreResult(float maxScore) {
-            this.maxScore = maxScore;
-        }
+    public MaxScoreResult(float maxScore) {
+      this.maxScore = maxScore;
     }
+  }
 
-    static class FixedBitSetCollector extends SimpleCollector {
-        private final FixedBitSet bitSet;
+  static class FixedBitSetCollector extends SimpleCollector {
+    private final FixedBitSet bitSet;
 
-        private int docBase;
+    private int docBase;
 
-        FixedBitSetCollector(int maxDoc) {
-            this.bitSet = new FixedBitSet(maxDoc);
-        }
+    FixedBitSetCollector(int maxDoc) {
+      this.bitSet = new FixedBitSet(maxDoc);
+    }
 
-        @Override
-        protected void doSetNextReader(LeafReaderContext context) throws 
IOException {
-            this.docBase = context.docBase;
-        }
+    @Override
+    protected void doSetNextReader(LeafReaderContext context) throws 
IOException {
+      this.docBase = context.docBase;
+    }
 
-        @Override
-        public void collect(int doc) throws IOException {
-            this.bitSet.set(this.docBase + doc);
-        }
+    @Override
+    public void collect(int doc) throws IOException {
+      this.bitSet.set(this.docBase + doc);
+    }
 
-        @Override
-        public ScoreMode scoreMode() {
-            return ScoreMode.COMPLETE_NO_SCORES;
-        }
+    @Override
+    public ScoreMode scoreMode() {
+      return ScoreMode.COMPLETE_NO_SCORES;
+    }
 
-        FixedBitSet bitSet() {
-            return this.bitSet;
-        }
+    FixedBitSet bitSet() {
+      return this.bitSet;
     }
+  }
 
-    static class SearchResult {
-        final ScoreMode scoreMode;
-        private final Object[] result;
+  static class SearchResult {
+    final ScoreMode scoreMode;
+    private final Object[] result;
 
-        public SearchResult(ScoreMode scoreMode, Object[] result) {
-            this.scoreMode = scoreMode;
-            this.result = result;
-        }
+    public SearchResult(ScoreMode scoreMode, Object[] result) {
+      this.scoreMode = scoreMode;
+      this.result = result;
+    }
 
-        public TopDocsResult getTopDocsResult() {
-            for (Object res : result) {
-                if (res instanceof TopDocsResult) {
-                    return (TopDocsResult) res;
-                }
-            }
-            return null;
+    public TopDocsResult getTopDocsResult() {
+      for (Object res : result) {
+        if (res instanceof TopDocsResult) {
+          return (TopDocsResult) res;
         }
+      }
+      return null;
+    }
 
-        public float getMaxScore(int totalHits) {
-            if (totalHits > 0) {
-                for (Object res : result) {
-                    if (res instanceof MaxScoreResult) {
-                        return ((MaxScoreResult) res).maxScore;
-                    }
-                }
-                return Float.NaN;
-            } else {
-                return 0.0f;
-            }
-        }
+    public float getMaxScore(int totalHits) {
+      if (totalHits > 0) {
+        for (Object res : result) {
+          if (res instanceof MaxScoreResult) {
+            return ((MaxScoreResult) res).maxScore;
+          }
+        }
+        return Float.NaN;
+      } else {
+        return 0.0f;
+      }
+    }
 
-        public FixedBitSet getFixedBitSet() {
-            for (Object res : result) {
-                if (res instanceof FixedBitSet) {
-                    return (FixedBitSet) res;
-                }
-            }
-            return null;
+    public FixedBitSet getFixedBitSet() {
+      for (Object res : result) {
+        if (res instanceof FixedBitSet) {
+          return (FixedBitSet) res;
         }
+      }
+      return null;
     }
+  }
 
-    private static class MaxScoreCM implements CollectorManager<Collector, 
Object> {
-        private final Collector[] firstCollectors;
-        private final int firstMaxScoreCollectorIndex;
+  private static class MaxScoreCM implements CollectorManager<Collector, 
Object> {
+    private final Collector[] firstCollectors;
+    private final int firstMaxScoreCollectorIndex;
 
-        public MaxScoreCM(Collector[] firstCollectors, int 
firstMaxScoreCollectorIndex) {
-            this.firstCollectors = firstCollectors;
-            this.firstMaxScoreCollectorIndex = firstMaxScoreCollectorIndex;
-        }
+    public MaxScoreCM(Collector[] firstCollectors, int 
firstMaxScoreCollectorIndex) {
+      this.firstCollectors = firstCollectors;
+      this.firstMaxScoreCollectorIndex = firstMaxScoreCollectorIndex;
+    }
 
-        @Override
-        public Collector newCollector() throws IOException {
-            MaxScoreCollector collector = new MaxScoreCollector();
-            if (firstCollectors[firstMaxScoreCollectorIndex] == null) {
-                firstCollectors[firstMaxScoreCollectorIndex] = collector;
-            }
-            return collector;
-        }
+    @Override
+    public Collector newCollector() throws IOException {
+      MaxScoreCollector collector = new MaxScoreCollector();
+      if (firstCollectors[firstMaxScoreCollectorIndex] == null) {
+        firstCollectors[firstMaxScoreCollectorIndex] = collector;
+      }
+      return collector;
+    }
 
-        @Override
-        @SuppressWarnings("rawtypes")
-        public Object reduce(Collection collectors) throws IOException {
+    @Override
+    @SuppressWarnings("rawtypes")
+    public Object reduce(Collection collectors) throws IOException {
 
-            MaxScoreCollector collector;
-            float maxScore = 0.0f;
-            for (Iterator var4 = collectors.iterator();
-                 var4.hasNext();
-                 maxScore = Math.max(maxScore, collector.getMaxScore())) {
-                collector = (MaxScoreCollector) var4.next();
-            }
+      MaxScoreCollector collector;
+      float maxScore = 0.0f;
+      for (Iterator var4 = collectors.iterator();
+          var4.hasNext();
+          maxScore = Math.max(maxScore, collector.getMaxScore())) {
+        collector = (MaxScoreCollector) var4.next();
+      }
 
-            return new MaxScoreResult(maxScore);
-        }
+      return new MaxScoreResult(maxScore);
     }
+  }
 
-    private static class DocSetCM implements CollectorManager<Collector, 
Object> {
-        private final int maxDoc;
+  private static class DocSetCM implements CollectorManager<Collector, Object> 
{
+    private final int maxDoc;
 
-        public DocSetCM(int maxDoc) {
-            this.maxDoc = maxDoc;
-        }
+    public DocSetCM(int maxDoc) {
+      this.maxDoc = maxDoc;
+    }
 
-        @Override
-        public Collector newCollector() throws IOException {
-            // TODO: add to firstCollectors here? or if not have comment 
w.r.t. why not adding
-            return new FixedBitSetCollector(maxDoc);
-        }
+    @Override
+    public Collector newCollector() throws IOException {
+      // TODO: add to firstCollectors here? or if not have comment w.r.t. why 
not adding
+      return new FixedBitSetCollector(maxDoc);
+    }
 
-        @Override
-        @SuppressWarnings({"rawtypes"})
-        public Object reduce(Collection collectors) throws IOException {
-            final FixedBitSet reduced = new FixedBitSet(maxDoc);
-            for (Object collector : collectors) {
-                if (collector instanceof FixedBitSetCollector) {
-                    reduced.or(((FixedBitSetCollector) collector).bitSet());
-                }
-            }
-            return reduced;
+    @Override
+    @SuppressWarnings({"rawtypes"})
+    public Object reduce(Collection collectors) throws IOException {
+      final FixedBitSet reduced = new FixedBitSet(maxDoc);
+      for (Object collector : collectors) {
+        if (collector instanceof FixedBitSetCollector) {
+          reduced.or(((FixedBitSetCollector) collector).bitSet());
         }
+      }
+      return reduced;
+    }
+  }
+
+  private class TopDocsCM implements CollectorManager<Collector, Object> {
+    private final int len;
+    private final QueryCommand cmd;
+    private final Collector[] firstCollectors;
+    private final int firstTopDocsCollectorIndex;
+
+    public TopDocsCM(
+        int len, QueryCommand cmd, Collector[] firstCollectors, int 
firstTopDocsCollectorIndex) {
+      this.len = len;
+      this.cmd = cmd;
+      this.firstCollectors = firstCollectors;
+      this.firstTopDocsCollectorIndex = firstTopDocsCollectorIndex;
     }
 
-    private class TopDocsCM implements CollectorManager<Collector, Object> {
-        private final int len;
-        private final QueryCommand cmd;
-        private final Collector[] firstCollectors;
-        private final int firstTopDocsCollectorIndex;
+    @Override
+    public Collector newCollector() throws IOException {
+      @SuppressWarnings("rawtypes")
+      TopDocsCollector collector = searcher.buildTopDocsCollector(len, cmd);
+      if (firstCollectors[firstTopDocsCollectorIndex] == null) {
+        firstCollectors[firstTopDocsCollectorIndex] = collector;
+      }
+      return collector;
+    }
 
-        public TopDocsCM(int len, QueryCommand cmd, Collector[] 
firstCollectors, int firstTopDocsCollectorIndex) {
-            this.len = len;
-            this.cmd = cmd;
-            this.firstCollectors = firstCollectors;
-            this.firstTopDocsCollectorIndex = firstTopDocsCollectorIndex;
-        }
+    @Override
+    @SuppressWarnings("rawtypes")
+    public Object reduce(Collection collectors) throws IOException {
+
+      TopDocs[] topDocs = new TopDocs[collectors.size()];
 
-        @Override
-        public Collector newCollector() throws IOException {
-            @SuppressWarnings("rawtypes")
-            TopDocsCollector collector = searcher.buildTopDocsCollector(len, 
cmd);
-            if (firstCollectors[firstTopDocsCollectorIndex] == null) {
-                firstCollectors[firstTopDocsCollectorIndex] = collector;
-            }
-            return collector;
+      int totalHits = -1;
+      int i = 0;
+
+      Collector collector;
+      for (Object o : collectors) {
+        collector = (Collector) o;
+        if (collector instanceof TopDocsCollector) {
+          TopDocs td = ((TopDocsCollector) collector).topDocs(0, len);
+          assert td != null : Arrays.asList(topDocs);
+          topDocs[i++] = td;
         }
+      }
+
+      TopDocs mergedTopDocs = null;
 
-        @Override
-        @SuppressWarnings("rawtypes")
-        public Object reduce(Collection collectors) throws IOException {
-
-            TopDocs[] topDocs = new TopDocs[collectors.size()];
-
-            int totalHits = -1;
-            int i = 0;
-
-            Collector collector;
-            for (Object o : collectors) {
-                collector = (Collector) o;
-                if (collector instanceof TopDocsCollector) {
-                    TopDocs td = ((TopDocsCollector) collector).topDocs(0, 
len);
-                    assert td != null : Arrays.asList(topDocs);
-                    topDocs[i++] = td;
-                }
-            }
-
-            TopDocs mergedTopDocs = null;
-
-            if (topDocs.length > 0 && topDocs[0] != null) {
-                if (topDocs[0] instanceof TopFieldDocs) {
-                    TopFieldDocs[] topFieldDocs =
-                            Arrays.copyOf(topDocs, topDocs.length, 
TopFieldDocs[].class);
-                    mergedTopDocs = 
TopFieldDocs.merge(searcher.weightSort(cmd.getSort()), len, topFieldDocs);
-                } else {
-                    mergedTopDocs = TopDocs.merge(0, len, topDocs);
-                }
-                totalHits = (int) mergedTopDocs.totalHits.value;
-            }
-            return new TopDocsResult(mergedTopDocs, totalHits);
+      if (topDocs.length > 0 && topDocs[0] != null) {
+        if (topDocs[0] instanceof TopFieldDocs) {
+          TopFieldDocs[] topFieldDocs =
+              Arrays.copyOf(topDocs, topDocs.length, TopFieldDocs[].class);
+          mergedTopDocs = 
TopFieldDocs.merge(searcher.weightSort(cmd.getSort()), len, topFieldDocs);
+        } else {
+          mergedTopDocs = TopDocs.merge(0, len, topDocs);
         }
+        totalHits = (int) mergedTopDocs.totalHits.value;
+      }
+      return new TopDocsResult(mergedTopDocs, totalHits);
     }
+  }
 
-    static class TopDocsResult {
-        final TopDocs topDocs;
-        final int totalHits;
+  static class TopDocsResult {
+    final TopDocs topDocs;
+    final int totalHits;
 
-        public TopDocsResult(TopDocs topDocs, int totalHits) {
-            this.topDocs = topDocs;
-            this.totalHits = totalHits;
-        }
+    public TopDocsResult(TopDocs topDocs, int totalHits) {
+      this.topDocs = topDocs;
+      this.totalHits = totalHits;
     }
+  }
 }
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 5ccad5388ff..1f589d17415 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
@@ -1917,8 +1917,9 @@ public class SolrIndexSearcher extends IndexSearcher 
implements Closeable, SolrI
         if (log.isInfoEnabled()) {
           log.info("using CollectorManager");
         }
-        final MultiThreadedSearcher.SearchResult searchResult = new 
MultiThreadedSearcher(this).
-            searchCollectorManagers(len, cmd, query, true, needScores, false);
+        final MultiThreadedSearcher.SearchResult searchResult =
+            new MultiThreadedSearcher(this)
+                .searchCollectorManagers(len, cmd, query, true, needScores, 
false);
         scoreModeUsed = searchResult.scoreMode;
 
         MultiThreadedSearcher.TopDocsResult topDocsResult = 
searchResult.getTopDocsResult();
@@ -2046,8 +2047,9 @@ public class SolrIndexSearcher extends IndexSearcher 
implements Closeable, SolrI
         log.debug("using CollectorManager");
 
         boolean needMaxScore = needScores;
-        MultiThreadedSearcher.SearchResult searchResult = new 
MultiThreadedSearcher(this).
-            searchCollectorManagers(len, cmd, query, true, needMaxScore, true);
+        MultiThreadedSearcher.SearchResult searchResult =
+            new MultiThreadedSearcher(this)
+                .searchCollectorManagers(len, cmd, query, true, needMaxScore, 
true);
         MultiThreadedSearcher.TopDocsResult topDocsResult = 
searchResult.getTopDocsResult();
         totalHits = topDocsResult.totalHits;
         topDocs = topDocsResult.topDocs;

Reply via email to