The LIKE
condition allows us to use wildcards in the where clause of an SQL statement. This allows us to perform pattern matching. The LIKE
condition can be used in any valid SQL statement - select, insert, update, or delete. Like this
SELECT * FROM users
WHERE user_name like 'babu%';
like the same above operation any query is available for Cassandra in CLI.
Simple answer: there is no equivalent of LIKE
https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlSelect.html
Here is the command reference for v0.8:
http://www.datastax.com/docs/0.8/references/cql#cql-reference
If you maintain another set of rows that hold references to a username:
row: username:bab -> col:babu1, col:babar row: username:babu -> col:babur
Effectively you are cheating by pre-populating all of the results that you would normally search with in the RDBMS world. Storage is cheap in comparison to what it was years ago ... which is why this is now an accepted approach. It's less intensive on the CPU and Memory to retrieve a pre-populated list of information.
Since Cassandra 3.4 (3.5 recommended), LIKE queries can be achieved using a SSTable Attached Secondary Index (SASI).
For example:
CREATE TABLE cycling.cyclist_name (
id UUID PRIMARY KEY,
lastname text,
firstname text
);
Creating the SASI as follows:
CREATE CUSTOM INDEX fn_prefix ON cyclist_name (firstname)
USING 'org.apache.cassandra.index.sasi.SASIIndex';
Then a prefix LIKE query is working:
SELECT * FROM cyclist_name WHERE firstname LIKE 'M%';
SELECT * FROM cyclist_name WHERE firstname LIKE 'Mic%';
These examples and more configuration options, like suffix queries, can be found in the documentation
A more in depth explanation about how SASI works can be found here.
I know: It's a old question but there is a solution for this topic:
You can't use like operator in cassandra but you can use range operators and with the range operator you can solve this "like 'whatever%'"
An example: I have more than one product. Each product has his own partition key (first part of the primary key):
CREATE TABLE user(productId int, username text, PRIMARY KEY(productId, username));
Now i have some users:
INSERT INTO user(productId, username) VALUES (1, 'anna');
INSERT INTO user(productId, username) VALUES (1, 'alpha');
INSERT INTO user(productId, username) VALUES (1, 'andreas');
INSERT INTO user(productId, username) VALUES (1, 'alex');
INSERT INTO user(productId, username) VALUES (1, 'bernd');
INSERT INTO user(productId, username) VALUES (1, 'bob');
Now, i want to find all users which have an a at the beginning. In a SQL world i use LIKE 'a%' in Cassandra i use this:
SELECT * FROM user WHERE productId = 1 AND username >= 'a' AND username < 'b';
The result:
productid | username
-----------+----------
1 | alex
1 | alpha
1 | andreas
1 | anna
I came across this post while I was searching for a solution to execute WHERE column_name LIKE '%keyword%'
in Cassandra. The answers were promising but not quite addressing my issue.
CREATE CUSTOM INDEX idx_name ON keyspace.columnfamily (column_name)
USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS = {
'mode': 'CONTAINS',
'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer',
'case_sensitive': 'false'};
In order to make %keyword%
(two %s) works, the index must have options with mode: CONTAINS along with that analyzer_class to make case_sensitive effective.
来源:https://stackoverflow.com/questions/9905795/is-there-any-query-for-cassandra-as-same-as-sqllike-condition