summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2020-01-02 11:35:37 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2020-01-02 11:35:37 +0100
commitfe102598a18b21a859d5b802883ccb2f462962f9 (patch)
tree70a8d6d239797c18a8634665e2a65bfaabebabba /searchlib
parent6d7909e022817be11b5f088cbd1e537d9b71919d (diff)
Add merge
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/abi-spec.json2
-rwxr-xr-xsearchlib/src/main/javacc/RankingExpressionParser.jj15
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java5
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