aboutsummaryrefslogtreecommitdiffstats
path: root/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2023-04-27 15:36:01 +0200
committerTor Egge <Tor.Egge@online.no>2023-04-27 15:36:01 +0200
commit00dc72987c75579cb85bca577a0d3648191b8203 (patch)
treefe0ad41893816baffdc1df07600c98e48f7c44e2 /streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
parentf5dd3cb5d31875cf596adc01f2207f690afe553f (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.cpp21
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