aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java50
1 files changed, 16 insertions, 34 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java
index 6039e09bbe1..7fd41862212 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java
@@ -15,6 +15,8 @@ import com.yahoo.prelude.fastsearch.GroupingListHit;
import com.yahoo.prelude.fastsearch.VespaBackEndSearcher;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
+import com.yahoo.search.dispatch.InvokerResult;
+import com.yahoo.search.dispatch.LeanHit;
import com.yahoo.search.grouping.vespa.GroupingExecutor;
import com.yahoo.search.query.Model;
import com.yahoo.search.query.QueryTree;
@@ -22,7 +24,6 @@ import com.yahoo.search.query.Ranking;
import com.yahoo.search.query.Sorting;
import com.yahoo.search.query.Sorting.Order;
import com.yahoo.search.result.Coverage;
-import com.yahoo.search.result.Relevance;
import com.yahoo.searchlib.aggregation.Grouping;
import com.yahoo.slime.BinaryFormat;
import com.yahoo.vespa.objects.BufferSerializer;
@@ -180,31 +181,22 @@ public class ProtobufSerialization {
return convertFromResult(searchResult).toByteArray();
}
- static Result deserializeToSearchResult(byte[] payload, Query query, VespaBackEndSearcher searcher, int partId, int distKey)
+ static InvokerResult deserializeToSearchResult(byte[] payload, Query query, VespaBackEndSearcher searcher, int partId, int distKey)
throws InvalidProtocolBufferException {
var protobuf = SearchProtocol.SearchReply.parseFrom(payload);
- return convertToResult(query, protobuf, searcher.getDocumentDatabase(query), partId, distKey, searcher.getName());
+ return convertToResult(query, protobuf, searcher.getDocumentDatabase(query), partId, distKey);
}
- private static Result convertToResult(Query query,
- SearchProtocol.SearchReply protobuf,
- DocumentDatabase documentDatabase,
- int partId,
- int distKey,
- String source) {
- var result = new Result(query);
+ static InvokerResult convertToResult(Query query, SearchProtocol.SearchReply protobuf,
+ DocumentDatabase documentDatabase, int partId, int distKey)
+ {
+ InvokerResult result = new InvokerResult(query, protobuf.getHitsCount());
- result.setTotalHitCount(protobuf.getTotalHitCount());
- result.setCoverage(convertToCoverage(protobuf));
+ result.getResult().setTotalHitCount(protobuf.getTotalHitCount());
+ result.getResult().setCoverage(convertToCoverage(protobuf));
- int hitItems = protobuf.getHitsCount();
var haveGrouping = protobuf.getGroupingBlob() != null && !protobuf.getGroupingBlob().isEmpty();
if (haveGrouping) {
- hitItems++;
- }
- result.hits().ensureCapacity(hitItems);
-
- if (haveGrouping) {
BufferSerializer buf = new BufferSerializer(new GrowableByteBuffer(protobuf.getGroupingBlob().asReadOnlyByteBuffer()));
int cnt = buf.getInt(null);
ArrayList<Grouping> list = new ArrayList<>(cnt);
@@ -215,26 +207,16 @@ public class ProtobufSerialization {
}
GroupingListHit hit = new GroupingListHit(list, documentDatabase.getDocsumDefinitionSet());
hit.setQuery(query);
- result.hits().add(hit);
+ result.getResult().hits().add(hit);
}
- var sorting = query.getRanking().getSorting();
for (var replyHit : protobuf.getHitsList()) {
- FastHit hit = new FastHit(replyHit.getGlobalId().toByteArray(), new Relevance(replyHit.getRelevance()), partId, distKey);
- hit.setQuery(query);
-
- if (!replyHit.getSortData().isEmpty()) {
- hit.setSortData(replyHit.getSortData().toByteArray(), sorting);
- }
- hit.setFillable();
- hit.setCached(false);
- hit.setSource(source);
-
- result.hits().add(hit);
- }
- if (sorting != null) {
- result.hits().setSorted(true);
+ LeanHit hit = (replyHit.getSortData().isEmpty())
+ ? new LeanHit(replyHit.getGlobalId().toByteArray(), partId, distKey, replyHit.getRelevance())
+ : new LeanHit(replyHit.getGlobalId().toByteArray(), partId, distKey, replyHit.getSortData().toByteArray());
+ result.getLeanHits().add(hit);
}
+
var slimeTrace = protobuf.getSlimeTrace();
if (slimeTrace != null && !slimeTrace.isEmpty()) {
var traces = new Value.ArrayValue();