summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@oath.com>2018-07-26 16:18:13 +0200
committerHenning Baldersheim <balder@oath.com>2018-07-26 16:18:13 +0200
commit6d046574404925ba0664e193e99718c9a1aba3d4 (patch)
tree0c0349cb6cbf44b70acbda4bef03514063f3a409 /searchlib
parentac502001883ce6b19cc00b51cb3ad2af5c0d0978 (diff)
Split reRank in 2 where one is using the other for later reuse.
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);