From 9b22c3648162db60d3e8bfef8ebd9f6760d7a808 Mon Sep 17 00:00:00 2001 From: HÃ¥vard Pettersen Date: Fri, 10 Aug 2018 14:55:28 +0000 Subject: adapt new HitCollector API to in-between MatchLoopCommunicator API --- .../vespa/searchcore/proton/matching/match_thread.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'searchcore') 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 extract_hits(SortedHitSequence seq, size_t size_hint) { + std::vector ret; + ret.reserve(size_hint); + while (seq.valid()) { + ret.push_back(seq.get()); + seq.next(); + } + return ret; +} + } // namespace proton::matching:: //----------------------------------------------------------------------------- @@ -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(); -- cgit v1.2.3