diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-03-31 10:58:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-31 10:58:28 +0200 |
commit | 2041f7962d50ff5254f5c9e8f365ca9a51a353ef (patch) | |
tree | 2758ad629a3535948f782a3888b2bf5c1460921e /container-search | |
parent | fa43fe9b29de2f846622d29fc93b55de5f839fad (diff) | |
parent | bc957f4d0196c043485b157c293b1163bc963b68 (diff) |
Merge pull request #21912 from vespa-engine/bratseth/more-validation
Slightly more validation
Diffstat (limited to 'container-search')
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()); } |