summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2020-01-24 10:48:14 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2020-01-24 10:48:14 +0100
commitfcc1f6ade1a8d98dce66a6d4c88dfb1a59c1d064 (patch)
tree85f13ab85635d46f2f1b65ca8c07d42e9f17bb4f /config-model
parent80594edb1dcc831f2cd48ca812dccf4e60dcd7f8 (diff)
Don't warn if query profile type is resolved later
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/MapEvaluationTypeContext.java1
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java2
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java4
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolverTestCase.java42
4 files changed, 46 insertions, 3 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/MapEvaluationTypeContext.java b/config-model/src/main/java/com/yahoo/searchdefinition/MapEvaluationTypeContext.java
index 172e538d708..6de7c985326 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/MapEvaluationTypeContext.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/MapEvaluationTypeContext.java
@@ -70,6 +70,7 @@ public class MapEvaluationTypeContext extends FunctionReferenceContext implement
public void setType(Reference reference, TensorType type) {
featureTypes.put(reference, type);
+ queryFeaturesNotDeclared.remove(reference);
}
@Override
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
index f6aed1e5abc..fa196cd3bbf 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
@@ -776,7 +776,7 @@ public class RankProfile implements Cloneable {
getConstants().forEach((k, v) -> context.setType(FeatureNames.asConstantFeature(k), v.type()));
rankingConstants().asMap().forEach((k, v) -> context.setType(FeatureNames.asConstantFeature(k), v.getTensorType()));
- // Add query features from rank profile types reached from the "default" profile
+ // Add query features from all rank profile types
for (QueryProfileType queryProfileType : queryProfiles.getTypeRegistry().allComponents()) {
for (FieldDescription field : queryProfileType.declaredFields().values()) {
TensorType type = field.getType().asTensorType();
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java
index 2d0998864f1..9a9e9bbba5f 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java
@@ -85,8 +85,8 @@ public class RankingExpressionTypeResolver extends Processor {
ensureValidDouble(profile.getSecondPhaseRanking(), "second-phase expression", context);
if ( context.tensorsAreUsed() && ! context.queryFeaturesNotDeclared().isEmpty()) {
deployLogger.log(Level.WARNING, "The following query features are not declared in query profile " +
- "types and will be interpreted as scalars, not tensors: " +
- context.queryFeaturesNotDeclared());
+ "types and will be interpreted as scalars, not tensors: " +
+ context.queryFeaturesNotDeclared());
}
}
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolverTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolverTestCase.java
index f0a0e389086..0174b5addee 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolverTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolverTestCase.java
@@ -1,8 +1,13 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.searchdefinition.processing;
+import com.google.inject.internal.util.$ToStringBuilder;
import com.yahoo.collections.Pair;
import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.search.query.profile.types.FieldDescription;
+import com.yahoo.search.query.profile.types.FieldType;
+import com.yahoo.search.query.profile.types.QueryProfileType;
+import com.yahoo.search.query.profile.types.TensorFieldType;
import com.yahoo.searchdefinition.RankProfile;
import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.SearchBuilder;
@@ -279,6 +284,43 @@ public class RankingExpressionTypeResolverTestCase {
message);
}
+ @Test
+ public void noWarningWhenUsingTensorsWhenQueryFeaturesAreDeclared() throws Exception {
+ InspectableDeployLogger logger = new InspectableDeployLogger();
+ SearchBuilder builder = new SearchBuilder();
+ QueryProfileType myType = new QueryProfileType("mytype");
+ myType.addField(new FieldDescription("rank.feature.query(foo)",
+ new TensorFieldType(TensorType.fromSpec("tensor(d[2])"))),
+ builder.getQueryProfileRegistry().getTypeRegistry());
+ myType.addField(new FieldDescription("rank.feature.query(bar)",
+ new TensorFieldType(TensorType.fromSpec("tensor(d[2])"))),
+ builder.getQueryProfileRegistry().getTypeRegistry());
+ myType.addField(new FieldDescription("rank.feature.query(baz)",
+ new TensorFieldType(TensorType.fromSpec("tensor(d[2])"))),
+ builder.getQueryProfileRegistry().getTypeRegistry());
+ builder.getQueryProfileRegistry().getTypeRegistry().register(myType);
+ builder.importString(joinLines(
+ "search test {",
+ " document test { ",
+ " field anyfield type tensor(d[2]) {",
+ " indexing: attribute",
+ " }",
+ " }",
+ " rank-profile my_rank_profile {",
+ " first-phase {",
+ " expression: sum(query(foo) + f() + sum(attribute(anyfield)))",
+ " }",
+ " function f() {",
+ " expression: query(bar) + query(baz)",
+ " }",
+ " }",
+ "}"
+ ), logger);
+ builder.build(true, logger);
+ String message = logger.findMessage("The following query features");
+ assertNull(message);
+ }
+
private Map<String, ReferenceNode> summaryFeatures(RankProfile profile) {
return profile.getSummaryFeatures().stream().collect(Collectors.toMap(f -> f.toString(), f -> f));
}