diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2020-01-02 11:35:37 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2020-01-02 11:35:37 +0100 |
commit | fe102598a18b21a859d5b802883ccb2f462962f9 (patch) | |
tree | 70a8d6d239797c18a8634665e2a65bfaabebabba /searchlib | |
parent | 6d7909e022817be11b5f088cbd1e537d9b71919d (diff) |
Add merge
Diffstat (limited to 'searchlib')
3 files changed, 22 insertions, 0 deletions
diff --git a/searchlib/abi-spec.json b/searchlib/abi-spec.json index ff6c1ad0b9d..79752c5feaf 100644 --- a/searchlib/abi-spec.json +++ b/searchlib/abi-spec.json @@ -878,6 +878,7 @@ "public final com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode tensorReduce()", "public final com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode tensorReduceComposites()", "public final com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode tensorJoin()", + "public final com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode tensorMerge()", "public final com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode tensorRename()", "public final com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode tensorConcat()", "public final com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode tensorGenerate()", @@ -1026,6 +1027,7 @@ "public static final int MAP", "public static final int REDUCE", "public static final int JOIN", + "public static final int MERGE", "public static final int RENAME", "public static final int CONCAT", "public static final int TENSOR", diff --git a/searchlib/src/main/javacc/RankingExpressionParser.jj b/searchlib/src/main/javacc/RankingExpressionParser.jj index c3d597fca46..6fa915a134d 100755 --- a/searchlib/src/main/javacc/RankingExpressionParser.jj +++ b/searchlib/src/main/javacc/RankingExpressionParser.jj @@ -126,6 +126,7 @@ TOKEN : <MAP: "map"> | <REDUCE: "reduce"> | <JOIN: "join"> | + <MERGE: "merge"> | <RENAME: "rename"> | <CONCAT: "concat"> | <TENSOR: "tensor"> | @@ -384,6 +385,7 @@ TensorFunctionNode tensorFunction() : tensorExpression = tensorReduce() | tensorExpression = tensorReduceComposites() | tensorExpression = tensorJoin() | + tensorExpression = tensorMerge() | tensorExpression = tensorRename() | tensorExpression = tensorConcat() | tensorExpression = tensorGenerate() | @@ -447,6 +449,18 @@ TensorFunctionNode tensorJoin() : doubleJoiner.asDoubleBinaryOperator())); } } +TensorFunctionNode tensorMerge() : +{ + ExpressionNode tensor1, tensor2; + LambdaFunctionNode doubleMerger; +} +{ + <MERGE> <LBRACE> tensor1 = expression() <COMMA> tensor2 = expression() <COMMA> doubleMerger = lambdaFunction() <RBRACE> + { return new TensorFunctionNode(new Merge(TensorFunctionNode.wrap(tensor1), + TensorFunctionNode.wrap(tensor2), + doubleMerger.asDoubleBinaryOperator())); } +} + TensorFunctionNode tensorRename() : { ExpressionNode tensor; @@ -671,6 +685,7 @@ String tensorFunctionName() : ( <MAP> { return token.image; } ) | ( <REDUCE> { return token.image; } ) | ( <JOIN> { return token.image; } ) | + ( <MERGE> { return token.image; } ) | ( <RENAME> { return token.image; } ) | ( <CONCAT> { return token.image; } ) | ( <TENSOR> { return token.image; } ) | diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java index ca2f6c6bbec..6e77ab186e8 100644 --- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java +++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java @@ -299,6 +299,11 @@ public class EvaluationTestCase { "tensor0 in [1,2,3]", "{ {x:0}:3, {x:1}:7 }"); tester.assertEvaluates("{ {x:0}:0.1 }", "join(tensor0, 0.1, f(x,y) (x*y))", "{ {x:0}:1 }"); + // tensor merge + tester.assertEvaluates("{ {x:0}:15, {x:1}:4 }", "merge(tensor0, tensor1, f(x,y) (x*y))", "{ {x:0}:3 }", "{ {x:0}:5, {x:1}:4 }"); + // -- join composites + tester.assertEvaluates("{ }", "merge(tensor0, tensor1, f(x,y) (x*y))", "{}"); + // TODO // argmax // argmin |