diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2017-10-05 12:23:27 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2017-10-05 12:25:35 +0200 |
commit | 113315ed2cc6958bb9241f616f14c7f9f7c7c70e (patch) | |
tree | 7c57f42ca47b7ed22b3dad6203acd0e4072b499e /searchlib | |
parent | 81b9d23e0e85e73626ff6edea446741bb263b465 (diff) |
Add convenience methods
Diffstat (limited to 'searchlib')
2 files changed, 35 insertions, 0 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 188ff29d629..6e79877a657 100755 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java @@ -257,4 +257,18 @@ public class RankingExpression implements Serializable { return root.evaluate(context); } + /** + * Creates a ranking expression from a string + * + * @throws IllegalArgumentException if the string is not a valid ranking expression + */ + public static RankingExpression from(String expression) { + try { + return new RankingExpression(expression); + } + catch (ParseException e) { + throw new IllegalStateException(e); + } + } + } 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 c0157b3c8b6..fe6ac76f32f 100755 --- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/RankingExpressionTestCase.java +++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/RankingExpressionTestCase.java @@ -1,11 +1,20 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.searchlib.rankingexpression; +import com.yahoo.searchlib.rankingexpression.evaluation.DoubleValue; import com.yahoo.searchlib.rankingexpression.parser.ParseException; +import com.yahoo.searchlib.rankingexpression.rule.ArithmeticNode; +import com.yahoo.searchlib.rankingexpression.rule.ArithmeticOperator; import com.yahoo.searchlib.rankingexpression.rule.CompositeNode; +import com.yahoo.searchlib.rankingexpression.rule.ConstantNode; +import com.yahoo.searchlib.rankingexpression.rule.Function; import com.yahoo.searchlib.rankingexpression.rule.IfNode; import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode; import com.yahoo.searchlib.rankingexpression.rule.FunctionNode; +import com.yahoo.searchlib.rankingexpression.rule.ReferenceNode; +import com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode; +import com.yahoo.tensor.functions.Reduce; +import com.yahoo.tensor.functions.TensorFunction; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -50,6 +59,18 @@ public class RankingExpressionTestCase { assertParse("query(var1) + query(var2) - query(var3) * (query(var4) / query(var5))", " $var1 + $var2 - $var3 *($var4 / $var5)"); assertParse("if (if (f1.out < query(p1), 0, 1) < if (f2.out < query(p2), 0, 1), f3.out, query(p3))", "if(if(f1.out<$p1,0,1)<if(f2.out<$p2,0,1),f3.out,$p3)"); } + + @Test + public void testProgrammaticBuilding() throws ParseException { + ReferenceNode input = new ReferenceNode("input"); + ReferenceNode constant = new ReferenceNode("constant"); + ArithmeticNode product = new ArithmeticNode(input, ArithmeticOperator.MULTIPLY, constant); + Reduce sum = new Reduce(new TensorFunctionNode.TensorFunctionExpressionNode(product), Reduce.Aggregator.sum); + RankingExpression expression = new RankingExpression(new TensorFunctionNode(sum)); + + RankingExpression expected = new RankingExpression("sum(input * constant)"); + assertEquals(expected.toString(), expression.toString()); + } @Test public void testLookaheadIndefinitely() throws Exception { |