diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-02-16 16:43:20 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-02-16 16:43:20 +0100 |
commit | e25d913b884339afc4f8e3073e4e4b795e55d930 (patch) | |
tree | 408e9fded165a07fae202fd691f6f2864680ac63 /config-model/src | |
parent | 6f99bd502132cd378124a40060ac1d74d54f5e92 (diff) |
Resolve slice dimension
Diffstat (limited to 'config-model/src')
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} } } |