aboutsummaryrefslogtreecommitdiffstats
path: root/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2017-09-07 12:26:22 +0000
committerHåvard Pettersen <havardpe@oath.com>2017-09-20 09:16:17 +0000
commit07145ad5ee9cc0f6d1bef0c76fd93a1053d9dde2 (patch)
tree8d3a391aef94fd7d8010820fb7f4f7947f97b660 /streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
parentf1018cb802aeb7b7731a0fc29ee7c708b665148d (diff)
enable re-using termwise bitvectors in second phase
detach match data from rank program and refactor match loop re-use bitvector in termwise search if range is the same
Diffstat (limited to 'streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp')
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
index f0c2a8d4cc9..dc9cfdc7efd 100644
--- a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
@@ -89,6 +89,7 @@ RankProcessor::initQueryEnvironment()
terms[i].getTerm()->index().c_str(), terms[i].getTerm()->getTerm());
}
}
+ _match_data = _mdLayout.createMatchData();
}
void
@@ -100,7 +101,7 @@ RankProcessor::initHitCollector(size_t wantedHitCount)
void
RankProcessor::setupRankProgram(RankProgram &program)
{
- program.setup(_mdLayout, _queryEnv, search::fef::Properties());
+ program.setup(*_match_data, _queryEnv, search::fef::Properties());
}
void
@@ -137,6 +138,7 @@ RankProcessor::RankProcessor(RankManager::Snapshot::SP snapshot,
_query(query),
_queryEnv(location, snapshot->getIndexEnvironment(rankProfile), queryProperties, attrMgr),
_mdLayout(),
+ _match_data(),
_rankProgram(),
_docId(TermFieldMatchData::invalidId()),
_score(0.0),
@@ -182,13 +184,13 @@ copyTermFieldMatchData(const std::vector<search::fef::TermFieldMatchData> &src,
class RankProgramWrapper : public HitCollector::IRankProgram
{
private:
- RankProgram &_rankProgram;
+ MatchData &_match_data;
public:
- RankProgramWrapper(RankProgram &rankProgram) : _rankProgram(rankProgram) {}
+ RankProgramWrapper(MatchData &match_data) : _match_data(match_data) {}
virtual void run(uint32_t docid, const std::vector<search::fef::TermFieldMatchData> &matchData) override {
// Prepare the match data object used by the rank program with earlier unpacked match data.
- copyTermFieldMatchData(matchData, _rankProgram.match_data());
+ copyTermFieldMatchData(matchData, _match_data);
(void) docid;
}
};
@@ -202,7 +204,7 @@ RankProcessor::calculateFeatureSet()
RankProgram &rankProgram = *(_summaryProgram.get() != nullptr ? _summaryProgram : _rankProgram);
search::fef::FeatureResolver resolver(rankProgram.get_seeds());
LOG(debug, "Feature handles: numNames(%ld)", resolver.num_features());
- RankProgramWrapper wrapper(rankProgram);
+ RankProgramWrapper wrapper(*_match_data);
FeatureSet::SP sf = _hitCollector->getFeatureSet(wrapper, resolver);
LOG(debug, "Feature set: numFeatures(%u), numDocs(%u)", sf->numFeatures(), sf->numDocs());
return sf;
@@ -217,9 +219,8 @@ RankProcessor::fillSearchResult(vdslib::SearchResult & searchResult)
void
RankProcessor::unpackMatchData(uint32_t docId)
{
- MatchData &matchData = _rankProgram->match_data();
_docId = docId;
- unpackMatchData(matchData);
+ unpackMatchData(*_match_data);
}
void