diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-05-31 01:39:53 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-05-31 01:39:53 +0200 |
commit | 6ebc3d55b64179b6286df0393ce5e0d3c8693081 (patch) | |
tree | 48a184d85ce2b9e45151ba328a4c8a713000dc37 /searchlib | |
parent | 42dc2654319418016e647d63bc36a4aef4dff7a9 (diff) |
Use inheritance information from the uncompiled rankprofile to sort out when
to use extrenal files, and when they are overridden.
Diffstat (limited to 'searchlib')
4 files changed, 18 insertions, 6 deletions
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java index 1f27bc8750e..f666a55d5f5 100755 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java @@ -19,7 +19,6 @@ import java.io.Reader; import java.io.Serializable; import java.io.StringReader; import java.util.Deque; -import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -255,8 +254,10 @@ public class RankingExpression implements Serializable { * @return a list of named rank properties required to implement this expression */ public Map<String, String> getRankProperties(List<ExpressionFunction> functions) { + return getRankProperties(new SerializationContext(functions)); + } + public Map<String, String> getRankProperties(SerializationContext context) { Deque<String> path = new LinkedList<>(); - SerializationContext context = new SerializationContext(functions); String serializedRoot = root.toString(new StringBuilder(), context, path, null).toString(); Map<String, String> serializedExpressions = context.serializedFunctions(); serializedExpressions.put(propertyName(name), serializedRoot); diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ExpressionNode.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ExpressionNode.java index dfcdf1e2662..07de5812c91 100755 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ExpressionNode.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ExpressionNode.java @@ -32,6 +32,9 @@ public abstract class ExpressionNode implements Serializable { public final String toString() { return toString(new StringBuilder(), new SerializationContext(), null, null).toString(); } + public final String toString(SerializationContext context) { + return toString(new StringBuilder(), context, null, null).toString(); + } /** * Returns a script instance of this based on the supplied script functions. diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ReferenceNode.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ReferenceNode.java index 335d3861d9d..d33c36f0d3b 100755 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ReferenceNode.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ReferenceNode.java @@ -85,10 +85,9 @@ public final class ReferenceNode extends CompositeNode { path.addLast(myPath); String functionName = getName(); - String functionPropertyName = RankingExpression.propertyName(functionName); - boolean alreadySerialized = context.serializedFunctions().containsKey(functionPropertyName); + boolean needSerialization = (getArguments().size() > 0) || context.needSerialization(functionName); - if ( ! alreadySerialized || getArguments().size() > 0) { + if ( needSerialization) { ExpressionFunction.Instance instance = function.expand(context, getArguments().expressions(), path); functionName = instance.getName(); @@ -99,7 +98,7 @@ public final class ReferenceNode extends CompositeNode { context.addFunctionTypeSerialization(functionName, function.returnType().get()); } path.removeLast(); - return string.append("rankingExpression(").append(functionName).append(')'); + return string.append("rankingExpression(").append(context.uniqueName(functionName)).append(')'); } // Not resolved in this context: output as-is diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java index 92889d6607b..c67a6f66d8c 100644 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java @@ -3,6 +3,7 @@ package com.yahoo.searchlib.rankingexpression.rule; import com.google.common.collect.ImmutableMap; import com.yahoo.searchlib.rankingexpression.ExpressionFunction; +import com.yahoo.searchlib.rankingexpression.RankingExpression; import com.yahoo.tensor.TensorType; import java.util.Collection; @@ -103,4 +104,12 @@ public class SerializationContext extends FunctionReferenceContext { public Map<String, String> serializedFunctions() { return serializedFunctions; } + public String uniqueName(String functionName) { + return functionName; + } + + public boolean needSerialization(String functionName) { + return ! serializedFunctions().containsKey(RankingExpression.propertyName(functionName)); + } + } |