aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--container-search/src/main/java/com/yahoo/search/Query.java3
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java2
-rw-r--r--container-search/src/test/java/com/yahoo/search/dispatch/rpc/ProtobufSerializationTest.java48
-rw-r--r--container-search/src/test/java/com/yahoo/search/query/profile/config/test/XmlReadingTestCase.java2
-rw-r--r--container-search/src/test/java/com/yahoo/search/query/profile/config/test/tensortypes/profile1.xml2
6 files changed, 50 insertions, 9 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 7d78012bcfd..74091d9978c 100644
--- a/container-search/src/main/java/com/yahoo/search/Query.java
+++ b/container-search/src/main/java/com/yahoo/search/Query.java
@@ -382,7 +382,8 @@ public class Query extends com.yahoo.processing.Request implements Cloneable {
.chain(new DefaultProperties());
// Pass the values from the query profile which maps through a field in the Query object model
- // through the property chain to cause those values to be set in the Query object model
+ // through the property chain to cause those values to be set in the Query object model with
+ // the right types according to query profiles
setFieldsFrom(queryProfileProperties, requestMap);
// We need special handling for "select" because it can be both the prefix of the nested JSON select
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 c60cf70bd59..82c570a9975 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
@@ -50,7 +50,7 @@ public class ProtobufSerialization {
}
}
- private static SearchProtocol.SearchRequest convertFromQuery(Query query, int hits, String serverId) {
+ static SearchProtocol.SearchRequest convertFromQuery(Query query, int hits, String serverId) {
var builder = SearchProtocol.SearchRequest.newBuilder().setHits(hits).setOffset(query.getOffset())
.setTimeout((int) query.getTimeLeft());
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java
index b3c10a67091..d9299c07614 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java
@@ -65,7 +65,7 @@ public class GroupingExecutor extends Searcher {
/**
* Constructs a new instance of this searcher with the given component id.
*
- * @param componentId The identifier to assign to this searcher.
+ * @param componentId the identifier to assign to this searcher
*/
public GroupingExecutor(ComponentId componentId) {
super(componentId);
diff --git a/container-search/src/test/java/com/yahoo/search/dispatch/rpc/ProtobufSerializationTest.java b/container-search/src/test/java/com/yahoo/search/dispatch/rpc/ProtobufSerializationTest.java
index 0867366303b..ff23c16e7ba 100644
--- a/container-search/src/test/java/com/yahoo/search/dispatch/rpc/ProtobufSerializationTest.java
+++ b/container-search/src/test/java/com/yahoo/search/dispatch/rpc/ProtobufSerializationTest.java
@@ -10,9 +10,10 @@ import com.yahoo.prelude.fastsearch.FastHit;
import com.yahoo.search.Query;
import com.yahoo.search.dispatch.InvokerResult;
import com.yahoo.search.dispatch.LeanHit;
+import com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry;
+import com.yahoo.search.query.profile.config.QueryProfileXMLReader;
import org.junit.Test;
-import java.io.IOException;
import java.util.Collections;
import java.util.List;
@@ -24,10 +25,42 @@ import static org.junit.Assert.assertTrue;
* @author ollivir
*/
public class ProtobufSerializationTest {
+
static final double DELTA = 0.000000000001;
@Test
- public void testDocsumSerialization() throws IOException {
+ public void testQuerySerialization() {
+ CompiledQueryProfileRegistry registry = new QueryProfileXMLReader().read("src/test/java/com/yahoo/search/query/profile/config/test/tensortypes").compile();
+ Query query = new Query.Builder().setQueryProfile(registry.getComponent("profile1"))
+ .setRequest("?query=test&ranking.features.query(tensor_1)=[1.200]")
+ .build();
+
+ SearchProtocol.SearchRequest request1 = ProtobufSerialization.convertFromQuery(query, 9,"serverId");
+ assertEquals(9, request1.getHits());
+ assertEquals(0, request1.getRankPropertiesCount());
+ assertEquals(0, request1.getTensorRankPropertiesCount());
+ assertEquals(0, request1.getFeatureOverridesCount());
+ assertEquals(2, request1.getTensorFeatureOverridesCount());
+ assertEquals("\"\\001\\001\\003key\\001\\rpre_key1_post?\\360\\000\\000\\000\\000\\000\\000\"",
+ contentsOf(request1.getTensorFeatureOverrides(0).getValue()));
+ assertEquals("\"\\006\\001\\001\\001x\\001?\\231\\231\\232\"",
+ contentsOf(request1.getTensorFeatureOverrides(1).getValue()));
+
+ query.prepare(); // calling prepare() moves "overrides" to "features" - content stays the same
+ SearchProtocol.SearchRequest request2 = ProtobufSerialization.convertFromQuery(query, 9,"serverId");
+ assertEquals(9, request2.getHits());
+ assertEquals(0, request2.getRankPropertiesCount());
+ assertEquals(2, request2.getTensorRankPropertiesCount());
+ assertEquals("\"\\001\\001\\003key\\001\\rpre_key1_post?\\360\\000\\000\\000\\000\\000\\000\"",
+ contentsOf(request2.getTensorRankProperties(0).getValue()));
+ assertEquals("\"\\006\\001\\001\\001x\\001?\\231\\231\\232\"",
+ contentsOf(request2.getTensorRankProperties(1).getValue()));
+ assertEquals(0, request2.getFeatureOverridesCount());
+ assertEquals(0, request2.getTensorFeatureOverridesCount());
+ }
+
+ @Test
+ public void testDocsumSerialization() {
Query q = new Query("search/?query=test&hits=10&offset=3");
var builder = ProtobufSerialization.createDocsumRequestBuilder(q, "server", "summary", true);
builder.setTimeout(0);
@@ -38,6 +71,12 @@ public class ProtobufSerializationTest {
assertEquals(41, bytes.length);
}
+ private String contentsOf(ByteString property) {
+ String string = property.toString();
+ int contentIndex = string.indexOf("contents=");
+ return string.substring(contentIndex + "contents=".length(), string.length() - 1);
+ }
+
SearchProtocol.SearchReply createSearchReply(int numHits, boolean useSorting) {
SearchProtocol.SearchReply.Builder reply = SearchProtocol.SearchReply.newBuilder();
reply.setTotalHitCount(7);
@@ -57,7 +96,7 @@ public class ProtobufSerializationTest {
return reply.build();
}
@Test
- public void testSearhReplyDecodingWithRelevance() {
+ public void testSearchReplyDecodingWithRelevance() {
Query q = new Query("search/?query=test");
InvokerResult result = ProtobufSerialization.convertToResult(q, createSearchReply(5, false), null, 1, 2);
assertEquals(result.getResult().getTotalHitCount(), 7);
@@ -76,7 +115,7 @@ public class ProtobufSerializationTest {
}
}
@Test
- public void testSearhReplyDecodingWithSortData() {
+ public void testSearchReplyDecodingWithSortData() {
Query q = new Query("search/?query=test");
InvokerResult result = ProtobufSerialization.convertToResult(q, createSearchReply(5, true), null, 1, 2);
assertEquals(result.getResult().getTotalHitCount(), 7);
@@ -95,4 +134,5 @@ public class ProtobufSerializationTest {
hitNum++;
}
}
+
}
diff --git a/container-search/src/test/java/com/yahoo/search/query/profile/config/test/XmlReadingTestCase.java b/container-search/src/test/java/com/yahoo/search/query/profile/config/test/XmlReadingTestCase.java
index ad85b5e37a1..b1faac2036b 100644
--- a/container-search/src/test/java/com/yahoo/search/query/profile/config/test/XmlReadingTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/query/profile/config/test/XmlReadingTestCase.java
@@ -501,7 +501,7 @@ public class XmlReadingTestCase {
Tensor.from("tensor<float>(x[1]):[1.2]"),
queryProfile1.properties().get("ranking.features.query(tensor_1)"));
assertEquals("tensor_4 contained in the profile is a tensor",
- Tensor.from("tensor(key{}):{key1:1.0}"),
+ Tensor.from("tensor(key{}):{pre_key1_post:1.0}"),
queryProfile1.properties().get("ranking.features.query(tensor_4)"));
Query queryProfile2 = new Query.Builder().setQueryProfile(registry.getComponent("profile2"))
diff --git a/container-search/src/test/java/com/yahoo/search/query/profile/config/test/tensortypes/profile1.xml b/container-search/src/test/java/com/yahoo/search/query/profile/config/test/tensortypes/profile1.xml
index cb1260bad8e..b20f802cdb6 100644
--- a/container-search/src/test/java/com/yahoo/search/query/profile/config/test/tensortypes/profile1.xml
+++ b/container-search/src/test/java/com/yahoo/search/query/profile/config/test/tensortypes/profile1.xml
@@ -1,5 +1,5 @@
<!-- Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
<query-profile id="profile1" type="type1">
<field name="mykey">key1</field>
- <field name="ranking.features.query(tensor_4)">{{key:"%{mykey}"}:1.0}</field>
+ <field name="ranking.features.query(tensor_4)">{{key:"pre_%{mykey}_post"}:1.0}</field>
</query-profile>