summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-05-31 01:39:53 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2021-05-31 01:39:53 +0200
commit6ebc3d55b64179b6286df0393ce5e0d3c8693081 (patch)
tree48a184d85ce2b9e45151ba328a4c8a713000dc37 /searchlib
parent42dc2654319418016e647d63bc36a4aef4dff7a9 (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')
-rwxr-xr-xsearchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java5
-rwxr-xr-xsearchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ExpressionNode.java3
-rwxr-xr-xsearchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ReferenceNode.java7
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java9
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));
+ }
+
}