diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-09-16 22:57:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-16 22:57:02 +0200 |
commit | 049d1eb173f90f002e9f7251476fa0c8a71e6f7e (patch) | |
tree | 432ee8550037db4765d5fe8bad542b7038643fe3 /container-search/src/main/java/com/yahoo/search/dispatch/rpc | |
parent | 74a39bfa696568cf2d94b9c3a773f4fc0c2d0d54 (diff) |
Revert "Revert "Revert "Revert "Use a LeanHit until merging is done." MERGEOK"""
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/dispatch/rpc')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java | 50 | ||||
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcSearchInvoker.java | 3 |
2 files changed, 18 insertions, 35 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(); diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcSearchInvoker.java b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcSearchInvoker.java index 9f42e794f5e..59f17501c32 100644 --- a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcSearchInvoker.java +++ b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcSearchInvoker.java @@ -6,6 +6,7 @@ import com.yahoo.compress.Compressor; 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.SearchInvoker; import com.yahoo.search.dispatch.rpc.Client.ProtobufResponse; import com.yahoo.search.dispatch.searchcluster.Node; @@ -60,7 +61,7 @@ public class RpcSearchInvoker extends SearchInvoker implements Client.ResponseRe } @Override - protected Result getSearchResult(Execution execution) throws IOException { + protected InvokerResult getSearchResult(Execution execution) throws IOException { long timeLeftMs = query.getTimeLeft(); if (timeLeftMs <= 0) { return errorResult(query, ErrorMessage.createTimeout("Timeout while waiting for " + getName())); |