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

dsmiley pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/branch_9x by this push:
     new 17ccccf12dd SOLR-17670: Fix unnecessary memory allocation caused by a 
large reRankDocs param (#3181)
17ccccf12dd is described below

commit 17ccccf12dd7462691933f13285f93a2b5c444a3
Author: jiabao.gao <[email protected]>
AuthorDate: Sun Feb 23 01:57:46 2025 +0800

    SOLR-17670: Fix unnecessary memory allocation caused by a large reRankDocs 
param (#3181)
    
    (cherry picked from commit 76c09a35dba42913a6bcb281b52b00f87564624a)
---
 solr/CHANGES.txt                                               | 2 ++
 solr/core/src/java/org/apache/solr/search/ReRankCollector.java | 8 ++++----
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index e88445de6ef..c590f48c296 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -99,6 +99,8 @@ Other Changes
 
 * SOLR-17667: Simplify zombie server logic in LBSolrClient (Houston Putman)
 
+* SOLR-17670: Fix unnecessary memory allocation caused by a large reRankDocs 
param. (JiaBao Gao)
+
 ==================  9.8.0 ==================
 New Features
 ---------------------
diff --git a/solr/core/src/java/org/apache/solr/search/ReRankCollector.java 
b/solr/core/src/java/org/apache/solr/search/ReRankCollector.java
index bf4c19b4063..d5258ff7152 100644
--- a/solr/core/src/java/org/apache/solr/search/ReRankCollector.java
+++ b/solr/core/src/java/org/apache/solr/search/ReRankCollector.java
@@ -83,15 +83,15 @@ public class ReRankCollector extends 
TopDocsCollector<ScoreDoc> {
     this.boostedPriority = boostedPriority;
     this.query = cmd.getQuery();
     Sort sort = cmd.getSort();
+    int maxDoc = searcher.getIndexReader().maxDoc();
+    int numHits = Math.min(Math.max(this.reRankDocs, length), maxDoc);
     if (sort == null) {
       this.sort = null;
-      this.mainCollector =
-          TopScoreDocCollector.create(Math.max(this.reRankDocs, length), 
cmd.getMinExactCount());
+      this.mainCollector = TopScoreDocCollector.create(numHits, 
cmd.getMinExactCount());
     } else {
       this.sort = sort = sort.rewrite(searcher);
       // scores are needed for Rescorer (regardless of whether sort needs it)
-      this.mainCollector =
-          TopFieldCollector.create(sort, Math.max(this.reRankDocs, length), 
cmd.getMinExactCount());
+      this.mainCollector = TopFieldCollector.create(sort, numHits, 
cmd.getMinExactCount());
     }
     this.searcher = searcher;
     this.reRankQueryRescorer = reRankQueryRescorer;

Reply via email to