diff --git a/src/java/org/apache/cassandra/db/filter/RowFilter.java b/src/java/org/apache/cassandra/db/filter/RowFilter.java index 4d35566fa41f..812514365f72 100644 --- a/src/java/org/apache/cassandra/db/filter/RowFilter.java +++ b/src/java/org/apache/cassandra/db/filter/RowFilter.java @@ -1164,9 +1164,9 @@ public final Index.Analyzer queryAnalyzer() @Override public int numFilteredValues() { - return indexAnalyzer == null + return queryAnalyzer == null ? super.numFilteredValues() - : indexAnalyzer().analyze(value).size(); + : queryAnalyzer().analyze(value).size(); } } diff --git a/test/unit/org/apache/cassandra/guardrails/GuardrailQueryFiltersTest.java b/test/unit/org/apache/cassandra/guardrails/GuardrailQueryFiltersTest.java index 5a96531fe278..5a9a3c15fb5f 100644 --- a/test/unit/org/apache/cassandra/guardrails/GuardrailQueryFiltersTest.java +++ b/test/unit/org/apache/cassandra/guardrails/GuardrailQueryFiltersTest.java @@ -202,6 +202,29 @@ public void testQueryFilters() throws Throwable assertWarns("SELECT * FROM %s WHERE x = '1 2 3' AND y = '4 5 6' AND z = '7 8 9' ALLOW FILTERING", 3); } + @Test + public void testQueryFiltersWithIndexAndQueryAnalyzers() throws Throwable + { + createTable("CREATE TABLE %s (k int PRIMARY KEY, v text)"); + + createIndex("CREATE CUSTOM INDEX ON %s(v) USING 'StorageAttachedIndex' WITH OPTIONS = {" + + "'index_analyzer': '{\n" + + "\t\"tokenizer\":{\"name\":\"ngram\", \"args\":{\"minGramSize\":\"1\", \"maxGramSize\":\"10\"}}," + + "\t\"filters\":[{\"name\":\"lowercase\"}]\n" + + "}'," + + "'query_analyzer': '{\n" + + "\t\"tokenizer\":{\"name\":\"whitespace\"},\n" + + "\t\"filters\":[{\"name\":\"porterstem\"}]\n" + + "}'};"); + + // only the query analyzer should be used to calculate the number of filters + assertValid("SELECT * FROM %s WHERE v = 'abcdef'"); + assertValid("SELECT * FROM %s WHERE v = 'abcdef ghijkl'"); + assertWarns("SELECT * FROM %s WHERE v = 'abcdef ghijkl mnopqr'", 3); + assertWarns("SELECT * FROM %s WHERE v = 'abcdef ghijkl mnopqr stuvwx'", 4); + assertFails("SELECT * FROM %s WHERE v = 'abcdef ghijkl mnopqr stuvwx xyz'", 5); + } + @Test public void testExcludedUsers() throws Throwable {