diff options
author | Jon Bratseth <bratseth@gmail.com> | 2023-03-02 21:18:03 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-02 21:18:03 +0100 |
commit | 3d3d8fbbfe3577c34039e22e51438415442da7d0 (patch) | |
tree | 3fed20816f0c44095fc88417f4a2d39c88697221 /searchlib | |
parent | e8843502782cf63a490fe9cd45c43329d509b0f5 (diff) | |
parent | 27f83008c0026108f9fc3a7cffa576897cb7a55d (diff) |
Merge pull request #26270 from vespa-engine/arnej/ranking-expression-wrapping
Arnej/ranking expression wrapping
Diffstat (limited to 'searchlib')
6 files changed, 33 insertions, 12 deletions
diff --git a/searchlib/abi-spec.json b/searchlib/abi-spec.json index 5413907e967..be0414421fe 100644 --- a/searchlib/abi-spec.json +++ b/searchlib/abi-spec.json @@ -364,6 +364,8 @@ "public boolean equals(java.lang.Object)", "public int hashCode()", "public java.lang.String toString()", + "public static java.lang.String wrapInRankingExpression(java.lang.String)", + "public boolean isSimpleRankingExpressionWrapper()", "public java.lang.StringBuilder toString(java.lang.StringBuilder, com.yahoo.searchlib.rankingexpression.rule.SerializationContext, java.util.Deque, com.yahoo.searchlib.rankingexpression.rule.CompositeNode)", "public int compareTo(com.yahoo.searchlib.rankingexpression.Reference)", "public static com.yahoo.searchlib.rankingexpression.Reference fromIdentifier(java.lang.String)", @@ -371,7 +373,9 @@ "public static java.util.Optional simple(java.lang.String)", "public bridge synthetic int compareTo(java.lang.Object)" ], - "fields" : [ ] + "fields" : [ + "public static final java.lang.String RANKING_EXPRESSION_WRAPPER" + ] }, "com.yahoo.searchlib.rankingexpression.evaluation.AbstractArrayContext" : { "superClass" : "com.yahoo.searchlib.rankingexpression.evaluation.Context", diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/ExpressionFunction.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/ExpressionFunction.java index 171151bfdf4..c7d69d7a36a 100755 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/ExpressionFunction.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/ExpressionFunction.java @@ -10,6 +10,7 @@ import com.yahoo.searchlib.rankingexpression.rule.ReferenceNode; import com.yahoo.searchlib.rankingexpression.rule.SerializationContext; import com.yahoo.tensor.TensorType; import com.yahoo.text.Utf8; +import static com.yahoo.searchlib.rankingexpression.Reference.wrapInRankingExpression; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -142,7 +143,7 @@ public class ExpressionFunction { if (shouldGenerateFeature(expr)) { String funcName = "autogenerated_ranking_feature@" + Long.toHexString(symbolCode(key + "=" + binding)); context.addFunctionSerialization(RankingExpression.propertyName(funcName), binding); - binding = "rankingExpression(" + funcName + ")"; + binding = wrapInRankingExpression(funcName); } argumentBindings.put(key, binding); } 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 c9f818544e3..c6de04ed755 100755 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java @@ -11,6 +11,7 @@ import com.yahoo.searchlib.rankingexpression.rule.SerializationContext; import com.yahoo.tensor.TensorType; import com.yahoo.tensor.evaluation.TypeContext; import com.yahoo.text.Text; +import static com.yahoo.searchlib.rankingexpression.Reference.RANKING_EXPRESSION_WRAPPER; import java.io.File; import java.io.FileNotFoundException; @@ -80,7 +81,7 @@ public class RankingExpression implements Serializable { private String name = ""; private ExpressionNode root; - private final static String RANKEXPRESSION = "rankingExpression("; + private final static String RANKEXPRESSION = RANKING_EXPRESSION_WRAPPER + "("; private final static String RANKINGSCRIPT = ").rankingScript"; private final static String EXPRESSION_NAME = ").expressionName"; diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java index eaecdf78162..64b251c0cd4 100644 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java @@ -120,17 +120,30 @@ public class Reference extends Name implements Comparable<Reference> { return toString(new StringBuilder(), new SerializationContext(), null, null).toString(); } + public static final String RANKING_EXPRESSION_WRAPPER = "rankingExpression"; + + public static String wrapInRankingExpression(String name) { + return RANKING_EXPRESSION_WRAPPER + "(" + name + ")"; + } + + public boolean isSimpleRankingExpressionWrapper() { + return name().equals(RANKING_EXPRESSION_WRAPPER) && isSimple(); + } + public StringBuilder toString(StringBuilder b, SerializationContext context, Deque<String> path, CompositeNode parent) { b.append(name()); if (arguments.expressions().size() > 0) { b.append("("); - for (int i = 0; i < arguments.expressions().size(); i++) { - ExpressionNode e = arguments.expressions().get(i); - e.toString(b, context, path, parent); - if (i+1 < arguments.expressions().size()) { - b.append(','); + if (isSimpleRankingExpressionWrapper()) { + b.append(simpleArgument().get()); + } else { + for (int i = 0; i < arguments.expressions().size(); i++) { + ExpressionNode e = arguments.expressions().get(i); + e.toString(b, context, path, parent); + if (i+1 < arguments.expressions().size()) { + b.append(','); + } } - } b.append(")"); } 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 85a12a49958..ec377c6f5d9 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 @@ -8,6 +8,7 @@ import com.yahoo.searchlib.rankingexpression.evaluation.Context; import com.yahoo.searchlib.rankingexpression.evaluation.Value; import com.yahoo.tensor.TensorType; import com.yahoo.tensor.evaluation.TypeContext; +import static com.yahoo.searchlib.rankingexpression.Reference.wrapInRankingExpression; import java.util.ArrayDeque; import java.util.Deque; @@ -95,7 +96,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(wrapInRankingExpression(functionName)); } // 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 7d0c0b98910..e2fffd824b9 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 @@ -6,6 +6,7 @@ import com.yahoo.searchlib.rankingexpression.RankingExpression; import com.yahoo.searchlib.rankingexpression.Reference; import com.yahoo.tensor.TensorType; import com.yahoo.tensor.evaluation.TypeContext; +import static com.yahoo.searchlib.rankingexpression.Reference.wrapInRankingExpression; import java.util.Collection; import java.util.Collections; @@ -97,13 +98,13 @@ public class SerializationContext extends FunctionReferenceContext { /** Adds the serialization of the argument type to a function */ public void addArgumentTypeSerialization(String functionName, String argumentName, TensorType type) { - serializedFunctions.put("rankingExpression(" + functionName + ")." + argumentName + ".type", type.toString()); + serializedFunctions.put(wrapInRankingExpression(functionName) + "." + argumentName + ".type", type.toString()); } /** Adds the serialization of the return type of a function */ public void addFunctionTypeSerialization(String functionName, TensorType type) { if (type.rank() == 0) return; // no explicit type implies scalar (aka rank 0 tensor) - serializedFunctions.put("rankingExpression(" + functionName + ").type", type.toString()); + serializedFunctions.put(wrapInRankingExpression(functionName) + ".type", type.toString()); } @Override |