This is an automated email from the ASF dual-hosted git repository.
jackie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 97a2e6d95e fix TextMatchFilterOperator boolean grouping (#13009)
97a2e6d95e is described below
commit 97a2e6d95eb87c67405cd661371a51acc478adec
Author: Christopher Peck <[email protected]>
AuthorDate: Thu Apr 25 16:14:26 2024 -0700
fix TextMatchFilterOperator boolean grouping (#13009)
---
.../optimizer/filter/TextMatchFilterOptimizer.java | 2 +-
.../core/query/optimizer/QueryOptimizerTest.java | 29 ++++++++++++----------
2 files changed, 17 insertions(+), 14 deletions(-)
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/optimizer/filter/TextMatchFilterOptimizer.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/optimizer/filter/TextMatchFilterOptimizer.java
index aca4e2d5cc..8c742cfc98 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/optimizer/filter/TextMatchFilterOptimizer.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/optimizer/filter/TextMatchFilterOptimizer.java
@@ -162,7 +162,7 @@ public class TextMatchFilterOptimizer implements
FilterOptimizer {
mergedTextMatchFilter = String.join(SPACE + operator + SPACE,
literals);
}
Expression mergedTextMatchExpression =
RequestUtils.getFunctionExpression(FilterKind.TEXT_MATCH.name());
- Expression mergedTextMatchFilterExpression =
RequestUtils.getLiteralExpression(mergedTextMatchFilter);
+ Expression mergedTextMatchFilterExpression =
RequestUtils.getLiteralExpression("(" + mergedTextMatchFilter + ")");
mergedTextMatchExpression.getFunctionCall()
.setOperands(Arrays.asList(entry.getKey(),
mergedTextMatchFilterExpression));
diff --git
a/pinot-core/src/test/java/org/apache/pinot/core/query/optimizer/QueryOptimizerTest.java
b/pinot-core/src/test/java/org/apache/pinot/core/query/optimizer/QueryOptimizerTest.java
index 337075f974..848f458742 100644
---
a/pinot-core/src/test/java/org/apache/pinot/core/query/optimizer/QueryOptimizerTest.java
+++
b/pinot-core/src/test/java/org/apache/pinot/core/query/optimizer/QueryOptimizerTest.java
@@ -178,7 +178,7 @@ public class QueryOptimizerTest {
List<Expression> operands = filterFunction.getOperands();
assertEquals(operands.size(), 2);
assertEquals(operands.get(0),
RequestUtils.getIdentifierExpression("string"));
- assertEquals(operands.get(1), RequestUtils.getLiteralExpression("foo AND
bar OR baz"));
+ assertEquals(operands.get(1), RequestUtils.getLiteralExpression("((foo AND
bar) OR baz)"));
}
private static Expression getRangeFilterExpression(String column, String
rangeString) {
@@ -268,32 +268,35 @@ public class QueryOptimizerTest {
// TextMatchFilterOptimizer
testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string, 'foo') AND
TEXT_MATCH(string, 'bar')",
- "SELECT * FROM testTable WHERE TEXT_MATCH(string, 'foo AND bar')");
+ "SELECT * FROM testTable WHERE TEXT_MATCH(string, '(foo AND bar)')");
testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string, '\"foo bar\"')
AND TEXT_MATCH(string, 'baz')",
- "SELECT * FROM testTable WHERE TEXT_MATCH(string, '\"foo bar\" AND
baz')");
+ "SELECT * FROM testTable WHERE TEXT_MATCH(string, '(\"foo bar\" AND
baz)')");
testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string, '\"foo bar\"')
AND TEXT_MATCH(string, '/.*ooba.*/')",
- "SELECT * FROM testTable WHERE TEXT_MATCH(string, '\"foo bar\" AND
/.*ooba.*/')");
+ "SELECT * FROM testTable WHERE TEXT_MATCH(string, '(\"foo bar\" AND
/.*ooba.*/)')");
testQuery("SELECT * FROM testTable WHERE int = 1 AND TEXT_MATCH(string,
'foo') AND TEXT_MATCH(string, 'bar')",
- "SELECT * FROM testTable WHERE int = 1 AND TEXT_MATCH(string, 'foo AND
bar')");
+ "SELECT * FROM testTable WHERE int = 1 AND TEXT_MATCH(string, '(foo
AND bar)')");
testQuery("SELECT * FROM testTable WHERE int = 1 OR TEXT_MATCH(string,
'foo') AND TEXT_MATCH(string, 'bar')",
- "SELECT * FROM testTable WHERE int = 1 OR TEXT_MATCH(string, 'foo AND
bar')");
+ "SELECT * FROM testTable WHERE int = 1 OR TEXT_MATCH(string, '(foo AND
bar)')");
testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string, 'foo') AND NOT
TEXT_MATCH(string, 'bar')",
- "SELECT * FROM testTable WHERE TEXT_MATCH(string, 'foo AND NOT bar')");
+ "SELECT * FROM testTable WHERE TEXT_MATCH(string, '(foo AND NOT
bar)')");
testQuery("SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, 'foo') AND
TEXT_MATCH(string, 'bar')",
- "SELECT * FROM testTable WHERE TEXT_MATCH(string, 'NOT foo AND bar')");
+ "SELECT * FROM testTable WHERE TEXT_MATCH(string, '(NOT foo AND
bar)')");
testQuery("SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, 'foo') AND
NOT TEXT_MATCH(string, 'bar')",
- "SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, 'foo OR bar')");
+ "SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, '(foo OR
bar)')");
testQuery("SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, 'foo') OR
NOT TEXT_MATCH(string, 'bar')",
- "SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, 'foo AND bar')");
+ "SELECT * FROM testTable WHERE NOT TEXT_MATCH(string, '(foo AND
bar)')");
testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string, 'foo') AND
TEXT_MATCH(string, 'bar') OR "
- + "TEXT_MATCH(string, 'baz')", "SELECT * FROM testTable WHERE
TEXT_MATCH(string, 'foo AND bar OR baz')");
+ + "TEXT_MATCH(string, 'baz')", "SELECT * FROM testTable WHERE
TEXT_MATCH(string, '((foo AND bar) OR baz)')");
+ testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string, 'foo') AND
(TEXT_MATCH(string, 'bar') OR "
+ + "TEXT_MATCH(string, 'baz'))", "SELECT * FROM testTable WHERE
TEXT_MATCH(string, '(foo AND (bar OR baz))')");
testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string1, 'foo1') AND
TEXT_MATCH(string1, 'bar1') OR "
+ "TEXT_MATCH(string1, 'baz1') AND TEXT_MATCH(string2, 'foo')",
- "SELECT * FROM testTable WHERE TEXT_MATCH(string1, 'foo1 AND bar1') OR
TEXT_MATCH(string1, 'baz1') AND "
+ "SELECT * FROM testTable WHERE TEXT_MATCH(string1, '(foo1 AND bar1)')
OR TEXT_MATCH(string1, 'baz1') AND "
+ "TEXT_MATCH(string2, 'foo')");
testQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string1, 'foo1') AND
TEXT_MATCH(string1, 'bar1')"
+ "AND TEXT_MATCH(string2, 'foo2') AND TEXT_MATCH(string2,
'bar2')",
- "SELECT * FROM testTable WHERE TEXT_MATCH(string1, 'foo1 AND bar1')
AND TEXT_MATCH(string2, 'foo2 AND bar2')");
+ "SELECT * FROM testTable WHERE TEXT_MATCH(string1, '(foo1 AND bar1)')
AND TEXT_MATCH(string2, '(foo2 AND "
+ + "bar2)')");
testCannotOptimizeQuery("SELECT * FROM testTable WHERE TEXT_MATCH(string1,
'foo') OR TEXT_MATCH(string2, 'bar')");
testCannotOptimizeQuery(
"SELECT * FROM testTable WHERE int = 1 AND TEXT_MATCH(string, 'foo')
OR TEXT_MATCH(string, 'bar')");
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]