如何查询'%'在Cassandra 3.7中使用LIKE运算符的字符?

时间:2016-09-06 16:21:21

标签: cassandra datastax cql cql3 datastax-search

我使用Cassandra 3.7并且有一个带有SASI索引的文本列。 我们假设我想找到包含'%'的列值。在中间的某个地方。 问题在于'%'是LIKE子句的命令char。 如何逃避'%'查询中的字符为LIKE '%%%'

这是一个测试脚本:

DROP keyspace if exists kmv;
CREATE keyspace if not exists kmv WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor':'1'} ;
USE kmv;
CREATE TABLE if not exists kmv (id int, c1 text, c2 text, PRIMARY KEY(id, c1));
CREATE CUSTOM INDEX ON kmv.kmv  ( c2 ) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = {
'analyzed' : 'true',
'analyzer_class' : 'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer',
'case_sensitive' : 'false', 
'mode' : 'CONTAINS'
};  

INSERT into kmv (id, c1, c2) values (1, 'f22', 'qwe%asd');  
SELECT c2 from kmv.kmv where c2 like '%$$%$$%';

select查询不返回任何内容。

2 个答案:

答案 0 :(得分:1)

我认为您可以使用$$语法来实现此目的。你的where子句是:

LIKE'%$$%$$%'

来源:https://docs.datastax.com/en/cql/3.3/cql/cql_reference/escape_char_r.html

答案 1 :(得分:0)

百分号仅在开头和结尾处理为特殊字符。所以LIKE '%%%'适用于您的情况。

cqlsh:kmv> SELECT c2 from kmv.kmv where c2 like '%%%';

 c2
----------
 qwe%asd

然而,看看source,如果它是第一个或最后一个字符,我认为没有办法逃脱百分号,这意味着你不能像查询一样查找值从%开始。