summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp15
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/hitcollector.h1
2 files changed, 14 insertions, 2 deletions
diff --git a/searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp b/searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp
index 7ed4705b8b8..f07447de7cf 100644
--- a/searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp
@@ -209,11 +209,22 @@ HitCollector::reRank(DocumentScorer &scorer, size_t count)
return 0;
}
sortHitsByScore(hitsToReRank);
- _reRankedHits.reserve(_reRankedHits.size() + hitsToReRank);
+ std::vector<Hit> hits;
+ hits.reserve(hitsToReRank);
for (size_t i(0); i < hitsToReRank; i++) {
- _reRankedHits.push_back(_hits[_scoreOrder[i]]);
+ hits.push_back(_hits[_scoreOrder[i]]);
}
+ return reRank(scorer, std::move(hits));
+}
+size_t
+HitCollector::reRank(DocumentScorer &scorer, std::vector<Hit> hits) {
+ size_t hitsToReRank = hits.size();
+ if (_reRankedHits.empty()) {
+ _reRankedHits = std::move(hits);
+ } else {
+ _reRankedHits.insert(_reRankedHits.end(), hits.begin(), hits.end());
+ }
Scores &initScores = _ranges.first;
Scores &finalScores = _ranges.second;
initScores = Scores(_reRankedHits.back().second, _reRankedHits.front().second);
diff --git a/searchlib/src/vespa/searchlib/queryeval/hitcollector.h b/searchlib/src/vespa/searchlib/queryeval/hitcollector.h
index 4f20a5cae83..bbd1e08c65a 100644
--- a/searchlib/src/vespa/searchlib/queryeval/hitcollector.h
+++ b/searchlib/src/vespa/searchlib/queryeval/hitcollector.h
@@ -180,6 +180,7 @@ public:
**/
size_t reRank(DocumentScorer &scorer);
size_t reRank(DocumentScorer &scorer, size_t count);
+ size_t reRank(DocumentScorer &scorer, std::vector<Hit> hits);
std::pair<Scores, Scores> getRanges() const;
void setRanges(const std::pair<Scores, Scores> &ranges);