diff options
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"))); |