summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2018-08-10 14:55:28 +0000
committerHåvard Pettersen <havardpe@oath.com>2018-08-14 09:47:44 +0000
commit9b22c3648162db60d3e8bfef8ebd9f6760d7a808 (patch)
tree5606917bbfb30dc13cf4ad66e1c9ec1bb7e43164 /searchcore
parentb5819c74e563b46a39e2949348b7de01d16b96ae (diff)
adapt new HitCollector API to in-between MatchLoopCommunicator API
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp b/searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp
index 9232a15043b..4a08533d9cd 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp
@@ -23,6 +23,8 @@ using search::fef::MatchData;
using search::fef::RankProgram;
using search::fef::FeatureResolver;
using search::fef::LazyValue;
+using search::queryeval::HitCollector;
+using search::queryeval::SortedHitSequence;
namespace {
@@ -64,6 +66,16 @@ LazyValue get_score_feature(const RankProgram &rankProgram) {
return resolver.resolve(0);
}
+std::vector<HitCollector::Hit> extract_hits(SortedHitSequence seq, size_t size_hint) {
+ std::vector<HitCollector::Hit> ret;
+ ret.reserve(size_hint);
+ while (seq.valid()) {
+ ret.push_back(seq.get());
+ seq.next();
+ }
+ return ret;
+}
+
} // namespace proton::matching::<unnamed>
//-----------------------------------------------------------------------------
@@ -258,14 +270,14 @@ MatchThread::findMatches(MatchTools &tools)
if (isFirstThread()) {
LOG(debug, "SearchIterator after MultiBitVectorIteratorBase::optimize(): %s", tools.search().asString().c_str());
}
- HitCollector hits(matchParams.numDocs, matchParams.arraySize, matchParams.heapSize);
+ HitCollector hits(matchParams.numDocs, matchParams.arraySize);
match_loop_helper(tools, hits);
if (tools.has_second_phase_rank()) {
{ // 2nd phase ranking
tools.setup_second_phase();
DocidRange docid_range = scheduler.total_span(thread_id);
tools.search().initRange(docid_range.begin, docid_range.end);
- auto sorted_hits = hits.getSortedHeapHits();
+ auto sorted_hits = extract_hits(hits.getSortedHitSequence(matchParams.heapSize), matchParams.heapSize);
WaitTimer select_best_timer(wait_time_s);
auto kept_hits = communicator.selectBest(std::move(sorted_hits));
select_best_timer.done();