You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ds...@apache.org on 2025/02/22 17:57:51 UTC
(solr) branch main updated: SOLR-17670: Fix unnecessary memory allocation caused by a large reRankDocs param (#3181)
This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new 76c09a35dba SOLR-17670: Fix unnecessary memory allocation caused by a large reRankDocs param (#3181)
76c09a35dba is described below
commit 76c09a35dba42913a6bcb281b52b00f87564624a
Author: jiabao.gao <ga...@qq.com>
AuthorDate: Sun Feb 23 01:57:46 2025 +0800
SOLR-17670: Fix unnecessary memory allocation caused by a large reRankDocs param (#3181)
---
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 b54b271e560..9162f377b0d 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -246,6 +246,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;