summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2023-03-02 21:18:03 +0100
committerGitHub <noreply@github.com>2023-03-02 21:18:03 +0100
commit3d3d8fbbfe3577c34039e22e51438415442da7d0 (patch)
tree3fed20816f0c44095fc88417f4a2d39c88697221 /searchlib
parente8843502782cf63a490fe9cd45c43329d509b0f5 (diff)
parent27f83008c0026108f9fc3a7cffa576897cb7a55d (diff)
Merge pull request #26270 from vespa-engine/arnej/ranking-expression-wrapping
Arnej/ranking expression wrapping
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/abi-spec.json6
-rwxr-xr-xsearchlib/src/main/java/com/yahoo/searchlib/rankingexpression/ExpressionFunction.java3
-rwxr-xr-xsearchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java3
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java25
-rwxr-xr-xsearchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ReferenceNode.java3
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java5
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