diff options
author | Henning Baldersheim <balder@oath.com> | 2018-07-26 16:18:13 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@oath.com> | 2018-07-26 16:18:13 +0200 |
commit | 6d046574404925ba0664e193e99718c9a1aba3d4 (patch) | |
tree | 0c0349cb6cbf44b70acbda4bef03514063f3a409 /searchlib | |
parent | ac502001883ce6b19cc00b51cb3ad2af5c0d0978 (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.cpp | 15 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/queryeval/hitcollector.h | 1 |
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); |