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

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


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

commit 6e2b61e529ad2c8d9068740dffb9cab8f4d9416e
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 8f65e55bd3d..8837e6f3224 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -25,6 +25,8 @@ Bug Fixes
   doing distributed search (sharded collections). This could likely occur for 
fielded parameters such as
   f.CASE_SENSITIVE_FIELD.facet.limit=50. (Yue Yu, David Smiley)
 
+* SOLR-17670: Fix unnecessary memory allocation caused by a large reRankDocs 
param. (JiaBao Gao)
+
 Dependency Upgrades
 ---------------------
 (No changes)
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