aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-02-16 16:43:20 +0100
committerJon Bratseth <bratseth@gmail.com>2022-02-16 16:43:20 +0100
commite25d913b884339afc4f8e3073e4e4b795e55d930 (patch)
tree408e9fded165a07fae202fd691f6f2864680ac63 /config-model/src
parent6f99bd502132cd378124a40060ac1d74d54f5e92 (diff)
Resolve slice dimension
Diffstat (limited to 'config-model/src')
-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.java3
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java17
-rw-r--r--config-model/src/test/derived/slice/rank-profiles.cfg25
-rw-r--r--config-model/src/test/derived/slice/test.sd8
5 files changed, 43 insertions, 11 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 fef7ff56763..08475813317 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/MapEvaluationTypeContext.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/MapEvaluationTypeContext.java
@@ -104,7 +104,6 @@ public class MapEvaluationTypeContext extends FunctionReferenceContext implement
@Override
public TensorType getType(Reference reference) {
// computeIfAbsent without concurrent modification due to resolve adding more resolved entries:
-
boolean canBeResolvedGlobally = referenceCanBeResolvedGlobally(reference);
TensorType resolvedType = resolvedTypes.get(reference);
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 5b842b002bd..49c52b21907 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
@@ -998,7 +998,8 @@ public class RankProfile implements Cloneable {
return featureTypes;
}
- public MapEvaluationTypeContext typeContext(QueryProfileRegistry queryProfiles, Map<Reference, TensorType> featureTypes) {
+ public MapEvaluationTypeContext typeContext(QueryProfileRegistry queryProfiles,
+ Map<Reference, TensorType> featureTypes) {
MapEvaluationTypeContext context = new MapEvaluationTypeContext(getExpressionFunctions(), featureTypes);
// Add small and large constants, respectively
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java
index 75703c33f07..9370075bcf3 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java
@@ -63,8 +63,8 @@ public class RawRankProfile implements RankProfilesConfig.Producer {
QueryProfileRegistry queryProfiles, ImportedMlModels importedModels,
AttributeFields attributeFields, ModelContext.Properties deployProperties) {
this.name = rankProfile.name();
- compressedProperties = compress(new Deriver(rankProfile.compile(queryProfiles, importedModels),
- attributeFields, deployProperties).derive(largeExpressions));
+ compressedProperties = compress(new Deriver(rankProfile.compile(queryProfiles, importedModels), attributeFields, deployProperties, queryProfiles)
+ .derive(largeExpressions));
}
private Compressor.Compression compress(List<Pair<String, String>> properties) {
@@ -156,7 +156,10 @@ public class RawRankProfile implements RankProfilesConfig.Producer {
/**
* Creates a raw rank profile from the given rank profile
*/
- Deriver(RankProfile compiled, AttributeFields attributeFields, ModelContext.Properties deployProperties) {
+ Deriver(RankProfile compiled,
+ AttributeFields attributeFields,
+ ModelContext.Properties deployProperties,
+ QueryProfileRegistry queryProfiles) {
rankprofileName = compiled.name();
attributeTypes = compiled.getAttributeTypes();
queryFeatureTypes = compiled.getQueryFeatureTypes();
@@ -179,7 +182,9 @@ public class RawRankProfile implements RankProfilesConfig.Producer {
Map<String, RankProfile.RankingExpressionFunction> functions = compiled.getFunctions();
List<ExpressionFunction> functionExpressions = functions.values().stream().map(f -> f.function()).collect(Collectors.toList());
Map<String, String> functionProperties = new LinkedHashMap<>();
- SerializationContext functionSerializationContext = new SerializationContext(functionExpressions);
+ SerializationContext functionSerializationContext = new SerializationContext(functionExpressions,
+ Map.of(),
+ compiled.typeContext(queryProfiles));
if (firstPhaseRanking != null) {
functionProperties.putAll(firstPhaseRanking.getRankProperties(functionSerializationContext));
@@ -201,8 +206,8 @@ public class RawRankProfile implements RankProfilesConfig.Producer {
}
private void derivePropertiesAndFeaturesFromFunctions(Map<String, RankProfile.RankingExpressionFunction> functions,
- Map<String, String> functionProperties,
- SerializationContext functionContext) {
+ Map<String, String> functionProperties,
+ SerializationContext functionContext) {
if (functions.isEmpty()) return;
replaceFunctionFeatures(summaryFeatures, functionContext);
diff --git a/config-model/src/test/derived/slice/rank-profiles.cfg b/config-model/src/test/derived/slice/rank-profiles.cfg
new file mode 100644
index 00000000000..75725b81ecf
--- /dev/null
+++ b/config-model/src/test/derived/slice/rank-profiles.cfg
@@ -0,0 +1,25 @@
+rankprofile[].name "default"
+rankprofile[].fef.property[].name "vespa.type.query.myTensor"
+rankprofile[].fef.property[].value "tensor<float>(key{})"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
+rankprofile[].fef.property[].name "vespa.type.query.myTensor"
+rankprofile[].fef.property[].value "tensor<float>(key{})"
+rankprofile[].name "parent"
+rankprofile[].fef.property[].name "rankingExpression(mySlice@77dee0712164ce73).rankingScript"
+rankprofile[].fef.property[].value "query(myTensor){key:MY_KEY2}"
+rankprofile[].fef.property[].name "rankingExpression(myFunction).rankingScript"
+rankprofile[].fef.property[].value "4 * query(myTensor){key:MY_KEY1} * rankingExpression(mySlice@77dee0712164ce73)"
+rankprofile[].fef.property[].name "rankingExpression(myValue).rankingScript"
+rankprofile[].fef.property[].value "4"
+rankprofile[].fef.property[].name "rankingExpression(mySlice).rankingScript"
+rankprofile[].fef.property[].value "myTensor{key:MY_KEY2}"
+rankprofile[].fef.property[].name "vespa.type.query.myTensor"
+rankprofile[].fef.property[].value "tensor<float>(key{})"
diff --git a/config-model/src/test/derived/slice/test.sd b/config-model/src/test/derived/slice/test.sd
index fbb581d1b1d..c2060300785 100644
--- a/config-model/src/test/derived/slice/test.sd
+++ b/config-model/src/test/derived/slice/test.sd
@@ -5,8 +5,8 @@ search test {
rank-profile parent {
- function inline cpmScore() {
- expression: myValue * mySlice(query(myTensor))
+ function inline myFunction() {
+ expression: myValue * query(myTensor){MY_KEY1} * mySlice(query(myTensor))
}
function inline myValue() {
@@ -14,7 +14,9 @@ search test {
}
function inline mySlice(myTensor) {
- expression: myTensor{"NULL"}
+ # TODO: We are missing type resolving across function calls in serialization,
+ # so using the short form (without 'key') here will fail
+ expression: myTensor{key:MY_KEY2}
}
}