[ https://issues.apache.org/jira/browse/CASSANDRA-15169?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16952124#comment-16952124 ]
Michael Semb Wever edited comment on CASSANDRA-15169 at 10/15/19 5:26 PM: -------------------------------------------------------------------------- [~mazhenlin], if you look through the docs at https://github.com/apache/cassandra/blob/trunk/doc/SASI.md you see a few different use-cases. I've updated the unit tests to go through more of these use-cases. bq. there are many restrictions in the code for not applying RANGE on literal indexes(e.g. ColumnIndex.supports)… thanks for pointing that out. i'm still getting my head around that. in the meantime we can figure out where {{forceFlush}} results in different behaviour, as that's the obvious breakages to deal with… was (Author: michaelsembwever): [~mazhenlin], if you look through the docs at https://github.com/apache/cassandra/blob/trunk/doc/SASI.md you see a few different use-cases. It looks like we have broken the "equals queries perform prefix searches" on non-literal NORMAL indexes. See the "Equality & Prefix Queries" section. I've update the unit tests to go through more of these use-cases. bq. there are many restrictions in the code for not applying RANGE on literal indexes(e.g. ColumnIndex.supports)… thanks for pointing that out. i'm still getting my head around that. in the meantime we can figure out where {{forceFlush}} results in different behaviour, as that's the obvious breakages to deal with… > SASIIndex does not compare strings correctly > -------------------------------------------- > > Key: CASSANDRA-15169 > URL: https://issues.apache.org/jira/browse/CASSANDRA-15169 > Project: Cassandra > Issue Type: Bug > Components: Feature/SASI > Reporter: mazhenlin > Assignee: mazhenlin > Priority: Normal > Attachments: CASSANDRA-15169-v1.patch, CASSANDRA-15169-v2.patch > > > In our scenario, we need to query with '>' conditions on string columns. So I > created index with is_literal = false. like the following: > > {code:java} > CREATE TABLE test (id int primary key, t text); > CREATE CUSTOM INDEX ON test (t) USING > 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = {'is_literal': > 'false'}; > {code} > I also inserted some records and query: > > {code:java} > insert into test(id,t) values(1,'abc'); > select * from test where t > 'ab'; > {code} > At first ,it worked. But after flush, the query returned none record. > I have read the code of SASIIndex and found that it is because in the > {code:java} > Expression.isLowerSatisfiedBy{code} > function, > {code:java} > term.compareTo{code} > was called with parameter checkFully=false, which cause the string 'abc' was > only compared with its first 2 characters( length of expression value). > > I have wrote a UT for this case and fixed it. -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org