summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHÃ¥vard Pettersen <3535158+havardpe@users.noreply.github.com>2021-11-05 12:09:27 +0100
committerGitHub <noreply@github.com>2021-11-05 12:09:27 +0100
commitd180ceae0bf8f782aa0c3f27ab65c2ae0ef052b9 (patch)
tree59c496a1d827ee5a5acdd3e94853a766bf2c49ee /searchlib
parent7e6517d5a039f1f3bc6551ec7baff9616cefa24a (diff)
parent9667aa90699281d865dbcf8c779593429c2a2918 (diff)
Merge pull request #19879 from vespa-engine/arnej/convert-match-features-to-protobuf
feature values in SearchReply -> protobuf
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/engine/proto_converter.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/engine/proto_converter.cpp b/searchlib/src/vespa/searchlib/engine/proto_converter.cpp
index 4c77d78cfe3..77781d583cb 100644
--- a/searchlib/src/vespa/searchlib/engine/proto_converter.cpp
+++ b/searchlib/src/vespa/searchlib/engine/proto_converter.cpp
@@ -114,6 +114,27 @@ ProtoConverter::search_reply_to_proto(const SearchReply &reply, ProtoSearchReply
hit->set_sort_data(&reply.sortData[sort_data_offset], sort_data_size);
}
}
+ if (reply.match_features.values.size() > 0) {
+ size_t num_match_features = reply.match_features.names.size();
+ assert(num_match_features * reply.hits.size() == reply.match_features.values.size());
+ for (const auto & name : reply.match_features.names) {
+ proto.add_match_feature_names()->assign(name.data(), name.size());
+ }
+ auto mfv_iter = reply.match_features.values.begin();
+ for (size_t i = 0; i < reply.hits.size(); ++i) {
+ auto *hit = proto.mutable_hits(i);
+ for (size_t j = 0; j < num_match_features; ++j) {
+ auto * obj = hit->add_match_features();
+ const auto & feature_value = *mfv_iter++;
+ if (feature_value.is_data()) {
+ auto mem = feature_value.as_data();
+ obj->set_tensor(mem.data, mem.size);
+ } else if (feature_value.is_double()) {
+ obj->set_number(feature_value.as_double());
+ }
+ }
+ }
+ }
proto.set_grouping_blob(&reply.groupResult[0], reply.groupResult.size());
const auto &slime_trace = reply.propertiesMap.trace().lookup("slime");
proto.set_slime_trace(slime_trace.get().data(), slime_trace.get().size());