diff options
author | Håvard Pettersen <havardpe@oath.com> | 2017-09-07 12:26:22 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@oath.com> | 2017-09-20 09:16:17 +0000 |
commit | 07145ad5ee9cc0f6d1bef0c76fd93a1053d9dde2 (patch) | |
tree | 8d3a391aef94fd7d8010820fb7f4f7947f97b660 /streamingvisitors | |
parent | f1018cb802aeb7b7731a0fc29ee7c708b665148d (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')
-rw-r--r-- | streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp | 15 | ||||
-rw-r--r-- | streamingvisitors/src/vespa/searchvisitor/rankprocessor.h | 3 |
2 files changed, 10 insertions, 8 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 diff --git a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h index f1fb917afcf..bab63c36522 100644 --- a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h +++ b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h @@ -29,6 +29,7 @@ private: QueryEnvironment _queryEnv; search::fef::MatchDataLayout _mdLayout; + search::fef::MatchData::UP _match_data; search::fef::RankProgram::UP _rankProgram; uint32_t _docId; double _score; @@ -67,7 +68,7 @@ public: void runRankProgram(uint32_t docId); search::FeatureSet::SP calculateFeatureSet(); void fillSearchResult(vdslib::SearchResult & searchResult); - const search::fef::MatchData &getMatchData() const { return _rankProgram->match_data(); } + const search::fef::MatchData &getMatchData() const { return *_match_data; } void setRankScore(double score) { _score = score; } double getRankScore() const { return _score; } HitCollector & getHitCollector() { return *_hitCollector; } |