diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-04-27 15:36:01 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-04-27 15:36:01 +0200 |
commit | 00dc72987c75579cb85bca577a0d3648191b8203 (patch) | |
tree | fe0ad41893816baffdc1df07600c98e48f7c44e2 /streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp | |
parent | f5dd3cb5d31875cf596adc01f2207f690afe553f (diff) |
Populate match features in search result for streaming search.
Diffstat (limited to 'streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp')
-rw-r--r-- | streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp index 3ce137bffe5..55638c3ec44 100644 --- a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp +++ b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp @@ -11,6 +11,7 @@ LOG_SETUP(".searchvisitor.rankprocessor"); using vespalib::FeatureSet; +using vespalib::FeatureValues; using search::fef::FeatureHandle; using search::fef::ITermData; using search::fef::ITermFieldData; @@ -131,6 +132,10 @@ RankProcessor::init(bool forRanking, size_t wantedHitCount) _rankScore = getFeature(*_rankProgram); _summaryProgram = _rankSetup.create_summary_program(); setupRankProgram(*_summaryProgram); + if (_rankSetup.has_match_features()) { + _match_features_program = _rankSetup.create_match_program(); + setupRankProgram(*_match_features_program); + } } else { _rankProgram = _rankSetup.create_dump_program(); setupRankProgram(*_rankProgram); @@ -157,7 +162,8 @@ RankProcessor::RankProcessor(RankManager::Snapshot::SP snapshot, _summaryProgram(), _zeroScore(), _rankScore(&_zeroScore), - _hitCollector() + _hitCollector(), + _match_features_program() { } @@ -222,10 +228,21 @@ RankProcessor::calculateFeatureSet() return sf; } +FeatureValues +RankProcessor::calculate_match_features() +{ + if (!_match_features_program) { + return FeatureValues(); + } + RankProgramWrapper wrapper(*_match_data); + search::fef::FeatureResolver resolver(_match_features_program->get_seeds(false)); + return _hitCollector->get_match_features(wrapper, resolver, _rankSetup.get_feature_rename_map()); +} + void RankProcessor::fillSearchResult(vdslib::SearchResult & searchResult) { - _hitCollector->fillSearchResult(searchResult); + _hitCollector->fillSearchResult(searchResult, calculate_match_features()); } void |