summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-06-09 14:21:12 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2021-06-09 14:40:57 +0200
commit379114c17138c12cb8dd4dd6b05099ea9dfdd84c (patch)
tree56162da31db7382a3cedae352830cecc1f66acaa /searchlib
parentce0d7152953752769403555dc53adeb7bff809fd (diff)
Unify how property names are generated and decomposed.
Diffstat (limited to 'searchlib')
-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
3 files changed, 31 insertions, 3 deletions
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")));