summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-03-31 10:00:17 +0200
committerJon Bratseth <bratseth@gmail.com>2022-03-31 10:00:17 +0200
commitbc957f4d0196c043485b157c293b1163bc963b68 (patch)
tree1fff6893f12be15bcd845ac2233a2ef7350a339c /container-search
parent0ce79641b9c8bb4cb12ecd1a61b052e4c4742efe (diff)
Slightly more validation
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/Query.java5
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java37
-rw-r--r--container-search/src/test/java/com/yahoo/search/test/QueryTestCase.java2
3 files changed, 24 insertions, 20 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 3d411adeb75..7df243404a5 100644
--- a/container-search/src/main/java/com/yahoo/search/Query.java
+++ b/container-search/src/main/java/com/yahoo/search/Query.java
@@ -367,11 +367,10 @@ public class Query extends com.yahoo.processing.Request implements Cloneable {
ZoneInfo zoneInfo) {
startTime = httpRequest.getJDiscRequest().creationTime(TimeUnit.MILLISECONDS);
if (queryProfile != null) {
- // Move all request parameters to the query profile just to validate that the parameter settings are legal
+ // Move all request parameters to the query profile
Properties queryProfileProperties = new QueryProfileProperties(queryProfile, embedders);
properties().chain(queryProfileProperties);
- // TODO: Just checking legality rather than actually setting would be faster
- setPropertiesFromRequestMap(requestMap, properties(), true); // Adds errors to the query for illegal set attempts
+ setPropertiesFromRequestMap(requestMap, properties(), true);
// Create the full chain
properties().chain(new QueryProperties(this, queryProfile.getRegistry(), embedders)).
diff --git a/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java b/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java
index 2c0f5dc8bea..d49a6b13b54 100644
--- a/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java
+++ b/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java
@@ -152,7 +152,6 @@ public class QueryProperties extends Properties {
if (key.toString().equals(Model.MODEL)) return query.getModel();
if (key.toString().equals(Ranking.RANKING)) return query.getRanking();
if (key.toString().equals(Presentation.PRESENTATION)) return query.getPresentation();
-
}
return super.get(key, context, substitution);
@@ -220,7 +219,8 @@ public class QueryProperties extends Properties {
matchPhase.setMaxFilterCoverage(asDouble(value, 0.2));
else
throwIllegalParameter(key.rest().toString(), Ranking.MATCH_PHASE);
- } else if (key.size() > 3 && key.get(2).equals(Ranking.DIVERSITY)) {
+ }
+ else if (key.size() > 3 && key.get(2).equals(Ranking.DIVERSITY)) {
Diversity diversity = ranking.getMatchPhase().getDiversity();
if (key.last().equals(Diversity.ATTRIBUTE)) {
diversity.setAttribute(asString(value, null));
@@ -267,11 +267,12 @@ public class QueryProperties extends Properties {
}
else if (key.size() > 2) {
String restKey = key.rest().rest().toString();
+ chained().requireSettable(key, value, context);
if (key.get(1).equals(Ranking.FEATURES))
- setRankingFeature(query, restKey, toSpecifiedType(restKey,
- value,
- profileRegistry.getTypeRegistry().getComponent("features"),
- context));
+ setRankFeature(query, restKey, toSpecifiedType(restKey,
+ value,
+ profileRegistry.getTypeRegistry().getComponent("features"),
+ context));
else if (key.get(1).equals(Ranking.PROPERTIES))
ranking.getProperties().put(restKey, toSpecifiedType(restKey,
value,
@@ -323,16 +324,19 @@ public class QueryProperties extends Properties {
}
else if (key.first().equals("rankfeature") || key.first().equals("featureoverride") ) { // featureoverride is deprecated
chained().requireSettable(key, value, context);
- setRankingFeature(query, key.rest().toString(), toSpecifiedType(key.rest().toString(),
- value,
- profileRegistry.getTypeRegistry().getComponent("features"),
- context));
- } else if (key.first().equals("rankproperty")) {
+ setRankFeature(query, key.rest().toString(), toSpecifiedType(key.rest().toString(),
+ value,
+ profileRegistry.getTypeRegistry().getComponent("features"),
+ context));
+ }
+ else if (key.first().equals("rankproperty")) {
+ chained().requireSettable(key, value, context);
query.getRanking().getProperties().put(key.rest().toString(), toSpecifiedType(key.rest().toString(),
value,
profileRegistry.getTypeRegistry().getComponent("properties"),
context));
- } else if (key.size()==1) {
+ }
+ else if (key.size() == 1) {
if (key.equals(Query.HITS))
query.setHits(asInteger(value,10));
else if (key.equals(Query.OFFSET))
@@ -349,8 +353,10 @@ public class QueryProperties extends Properties {
query.setGroupingSessionCache(asBoolean(value, true));
else
super.set(key,value,context);
- } else
- super.set(key,value,context);
+ }
+ else {
+ super.set(key, value, context);
+ }
}
catch (Exception e) { // Make sure error messages are informative. This should be moved out of this properties implementation
if (e.getMessage() != null && e.getMessage().startsWith("Could not set"))
@@ -375,8 +381,7 @@ public class QueryProperties extends Properties {
return properties;
}
- @SuppressWarnings("deprecation")
- private void setRankingFeature(Query query, String key, Object value) {
+ private void setRankFeature(Query query, String key, Object value) {
if (value instanceof Tensor) {
query.getRanking().getFeatures().put(key, (Tensor) value);
}
diff --git a/container-search/src/test/java/com/yahoo/search/test/QueryTestCase.java b/container-search/src/test/java/com/yahoo/search/test/QueryTestCase.java
index a4fd37145c8..56acdb039a9 100644
--- a/container-search/src/test/java/com/yahoo/search/test/QueryTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/test/QueryTestCase.java
@@ -360,7 +360,7 @@ public class QueryTestCase {
@Test
public void testTimeoutInRequestOverridesQueryProfile() {
QueryProfile profile = new QueryProfile("test");
- profile.set("timeout", 318, (QueryProfileRegistry)null);
+ profile.set("timeout", 318, null);
Query q = new Query(QueryTestCase.httpEncode("/search?timeout=500"), profile.compile(null));
assertEquals(500000L, q.getTimeout());
}