You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ja...@apache.org on 2024/04/25 23:14:32 UTC
(pinot) branch master updated: fix TextMatchFilterOperator boolean grouping (#13009)
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 <27...@users.noreply.github.com>
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: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org