aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/Query.java
diff options
context:
space:
mode:
authorOlli Virtanen <olli.virtanen@oath.com>2019-03-11 14:46:03 +0100
committerOlli Virtanen <olli.virtanen@oath.com>2019-03-11 14:46:03 +0100
commit91dd5bc9eb95701aeb3110fd402257084634aa73 (patch)
tree810957124a05c39547e92c6899c3ed5df690531c /container-search/src/main/java/com/yahoo/search/Query.java
parent511cdf2bea96cb39c7aee78b720fb9f05ba0a780 (diff)
Protobuf over jrt support in search
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/Query.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/Query.java43
1 files changed, 42 insertions, 1 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/Query.java b/container-search/src/main/java/com/yahoo/search/Query.java
index 97a8c35bfa3..b5871019bac 100644
--- a/container-search/src/main/java/com/yahoo/search/Query.java
+++ b/container-search/src/main/java/com/yahoo/search/Query.java
@@ -1,12 +1,15 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search;
+import ai.vespa.searchlib.searchprotocol.protobuf.Search;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.protobuf.ByteString;
import com.yahoo.collections.Tuple2;
import com.yahoo.component.Version;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.fs4.MapEncoder;
+import com.yahoo.io.GrowableByteBuffer;
import com.yahoo.log.LogLevel;
import com.yahoo.prelude.fastsearch.DocumentDatabase;
import com.yahoo.prelude.query.Highlight;
@@ -14,6 +17,7 @@ import com.yahoo.prelude.query.QueryException;
import com.yahoo.prelude.query.textualrepresentation.TextualQueryRepresentation;
import com.yahoo.processing.request.CompoundName;
import com.yahoo.search.federation.FederationSearcher;
+import com.yahoo.search.grouping.vespa.GroupingExecutor;
import com.yahoo.search.query.Model;
import com.yahoo.search.query.ParameterParser;
import com.yahoo.search.query.Presentation;
@@ -45,8 +49,10 @@ import com.yahoo.search.query.properties.RequestContextProperties;
import com.yahoo.search.yql.NullItemException;
import com.yahoo.search.yql.VespaSerializer;
import com.yahoo.search.yql.YqlParser;
+import com.yahoo.searchlib.aggregation.Grouping;
+import com.yahoo.vespa.objects.BufferSerializer;
import com.yahoo.yolean.Exceptions;
-import edu.umd.cs.findbugs.annotations.Nullable;
+
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collections;
@@ -1066,6 +1072,41 @@ public class Query extends com.yahoo.processing.Request implements Cloneable {
return Collections.<String,Boolean>emptyMap();
}
+ public Search.Request toProtobuf(String serverId, boolean includeQueryData) {
+ var builder = Search.Request.newBuilder()
+ .setHits(hits)
+ .setOffset(offset)
+ .setTimeout((int) getTimeLeft());
+
+ ranking.addToProtobuf(builder, includeQueryData);
+ model.addToProtobuf(builder, includeQueryData);
+
+ if(getGroupingSessionCache() || getRanking().getQueryCache()) {
+ // TODO verify that the session key is included whenever rank properties would have been
+ builder.setSessionKey(getSessionId(serverId).toString());
+ }
+ if(properties().getBoolean(Model.ESTIMATE)) {
+ builder.setHits(0);
+ }
+ if(GroupingExecutor.hasGroupingList(this)) {
+ List<Grouping> groupingList = GroupingExecutor.getGroupingList(this);
+ BufferSerializer gbuf = new BufferSerializer(new GrowableByteBuffer());
+ gbuf.putInt(null, groupingList.size());
+ for (Grouping g: groupingList){
+ g.serialize(gbuf);
+ }
+ gbuf.getBuf().flip();
+ builder.setGroupingBlob(ByteString.copyFrom(gbuf.getBuf().getByteBuffer()));
+ }
+
+ presentation.addToProtobuf(builder, includeQueryData);
+ if(getGroupingSessionCache()) {
+ builder.setCacheGrouping(true);
+ }
+
+ return builder.build();
+ }
+
private Map<String, String> createModelMap() {
Map<String, String> m = new HashMap<>();
if (model.getSearchPath() != null) m.put("searchpath", model.getSearchPath());