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;