summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java6
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionWithTransformerTokensTestCase.java2
-rw-r--r--searchlib/abi-spec.json2
-rwxr-xr-xsearchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java14
-rwxr-xr-xsearchlib/src/test/java/com/yahoo/searchlib/rankingexpression/RankingExpressionTestCase.java18
5 files changed, 35 insertions, 7 deletions
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 6b589a22de5..82e40d94aed 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
@@ -322,7 +322,7 @@ public class RawRankProfile implements RankProfilesConfig.Producer {
public List<Pair<String, String>> derive() {
List<Pair<String, String>> properties = new ArrayList<>();
for (RankProfile.RankProperty property : rankProperties) {
- if (("rankingExpression(" + RankProfile.FIRST_PHASE + ").rankingScript").equals(property.getName())) {
+ if (RankingExpression.propertyName(RankProfile.FIRST_PHASE).equals(property.getName())) {
// Could have been set by function expansion. Set expressions, then skip this property.
try {
firstPhaseRanking = new RankingExpression(property.getValue());
@@ -330,7 +330,7 @@ public class RawRankProfile implements RankProfilesConfig.Producer {
throw new IllegalArgumentException("Could not parse first phase expression", e);
}
}
- else if (("rankingExpression(" + RankProfile.SECOND_PHASE + ").rankingScript").equals(property.getName())) {
+ else if (RankingExpression.propertyName(RankProfile.SECOND_PHASE).equals(property.getName())) {
try {
secondPhaseRanking = new RankingExpression(property.getValue());
} catch (ParseException e) {
@@ -419,7 +419,7 @@ public class RawRankProfile implements RankProfilesConfig.Producer {
properties.add(new Pair<>("vespa.rank." + phase, expression.getRoot().toString()));
} else {
properties.add(new Pair<>("vespa.rank." + phase, "rankingExpression(" + name + ")"));
- properties.add(new Pair<>("rankingExpression(" + name + ").rankingScript", expression.getRoot().toString()));
+ properties.add(new Pair<>(RankingExpression.propertyName(name), expression.getRoot().toString()));
}
return properties;
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionWithTransformerTokensTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionWithTransformerTokensTestCase.java
index 2d8630e3ff7..e285d796882 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionWithTransformerTokensTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionWithTransformerTokensTestCase.java
@@ -91,7 +91,7 @@ public class RankingExpressionWithTransformerTokensTestCase {
searchBuilder.build();
Search search = searchBuilder.getSearch();
RankProfile rp = rankProfileRegistry.get(search, "my_profile");
- return new RankProfileTransformContext(rp, queryProfileRegistry, Collections.EMPTY_MAP, null, Collections.EMPTY_MAP, Collections.EMPTY_MAP);
+ return new RankProfileTransformContext(rp, queryProfileRegistry, Collections.emptyMap(), null, Collections.emptyMap(), Collections.emptyMap());
}
}
diff --git a/searchlib/abi-spec.json b/searchlib/abi-spec.json
index 2d006bbd973..5035a5f583f 100644
--- a/searchlib/abi-spec.json
+++ b/searchlib/abi-spec.json
@@ -336,6 +336,8 @@
"public java.util.Map getRankProperties(com.yahoo.searchlib.rankingexpression.rule.SerializationContext)",
"public java.util.Map getRankProperties(java.util.List)",
"public static java.lang.String propertyName(java.lang.String)",
+ "public static java.lang.String propertyExpressionName(java.lang.String)",
+ "public static java.lang.String extractScriptName(java.lang.String)",
"public com.yahoo.tensor.TensorType type(com.yahoo.tensor.evaluation.TypeContext)",
"public com.yahoo.searchlib.rankingexpression.evaluation.Value evaluate(com.yahoo.searchlib.rankingexpression.evaluation.Context)",
"public static com.yahoo.searchlib.rankingexpression.RankingExpression from(java.lang.String)"
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 3eb4f16a9dd..cdaaba34a44 100755
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java
@@ -81,6 +81,9 @@ public class RankingExpression implements Serializable {
private String name = "";
private ExpressionNode root;
+ private final static String RANKEXPRESSION = "rankingExpression(";
+ private final static String RANKINGSCRIPT = ").rankingScript";
+ private final static String EXPRESSION_NAME = ").expressionName";
/** Creates an anonymous ranking expression by consuming from the reader */
public RankingExpression(Reader reader) throws ParseException {
@@ -273,7 +276,16 @@ public class RankingExpression implements Serializable {
* @return the property name.
*/
public static String propertyName(String expressionName) {
- return "rankingExpression(" + expressionName + ").rankingScript";
+ return RANKEXPRESSION + expressionName + RANKINGSCRIPT;
+ }
+ public static String propertyExpressionName(String expressionName) {
+ return RANKEXPRESSION + expressionName + EXPRESSION_NAME;
+ }
+ public static String extractScriptName(String propertyName) {
+ if (propertyName.startsWith(RANKEXPRESSION) && propertyName.endsWith(RANKINGSCRIPT)) {
+ return propertyName.substring(RANKEXPRESSION.length(), propertyName.length() - RANKINGSCRIPT.length());
+ }
+ return null;
}
/**
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/RankingExpressionTestCase.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/RankingExpressionTestCase.java
index 092faa1934e..4214727eb5f 100755
--- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/RankingExpressionTestCase.java
+++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/RankingExpressionTestCase.java
@@ -14,6 +14,7 @@ import com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode;
import com.yahoo.tensor.functions.Reduce;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
@@ -23,10 +24,13 @@ import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.*;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
/**
* @author Simon Thoresen Hult
@@ -208,6 +212,16 @@ public class RankingExpressionTestCase {
}
@Test
+ public void testPropertyName() {
+ assertEquals("rankingExpression(m4).rankingScript", RankingExpression.propertyName("m4"));
+ assertEquals("m4", RankingExpression.extractScriptName("rankingExpression(m4).rankingScript"));
+ assertNull(RankingExpression.extractScriptName("rankingexpression(m4).rankingScript"));
+ assertNull(RankingExpression.extractScriptName("rankingExpression(m4).rankingscript"));
+
+ assertEquals("rankingExpression(m4).expressionName", RankingExpression.propertyExpressionName("m4"));
+ }
+
+ @Test
public void testBug3464208() throws ParseException {
List<ExpressionFunction> functions = new ArrayList<>();
functions.add(new ExpressionFunction("log10tweetage", null, new RankingExpression("69")));