diff options
author | HÃ¥vard Pettersen <3535158+havardpe@users.noreply.github.com> | 2021-11-05 12:09:27 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-05 12:09:27 +0100 |
commit | d180ceae0bf8f782aa0c3f27ab65c2ae0ef052b9 (patch) | |
tree | 59c496a1d827ee5a5acdd3e94853a766bf2c49ee | |
parent | 7e6517d5a039f1f3bc6551ec7baff9616cefa24a (diff) | |
parent | 9667aa90699281d865dbcf8c779593429c2a2918 (diff) |
Merge pull request #19879 from vespa-engine/arnej/convert-match-features-to-protobuf
feature values in SearchReply -> protobuf
-rw-r--r-- | searchlib/src/vespa/searchlib/engine/proto_converter.cpp | 21 |
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()); |