2016-09-06 3 views
4

J'utilise Cassandra 3.7 et j'ai une colonne de texte avec l'index SASI. Supposons que je veux trouver des valeurs de colonne qui contiennent le caractère '%' quelque part au milieu. Le problème est que '%' est un char de commande pour les clauses LIKE. Comment faire pour échapper '%' char dans une requête comme LIKE '%%%'?Comment interroger le caractère '%' en utilisant l'opérateur LIKE dans Cassandra 3.7?

Voici un script de test:

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 '%$$%$$%'; 

La requête de sélection ne renvoie rien.

Répondre

1

Je pense que vous pouvez utiliser la syntaxe $$ pour y parvenir. Votre clause where serait:

LIKE '% $$% $$%'

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

+0

Malheureusement, cela ne fonctionne pas. La requête ne renvoie toujours aucun résultat. P.S. J'ai ajouté un script de test à la question. – KMV

+0

Aww, parfait. Je vais déranger avec ce schéma si j'ai le temps aujourd'hui et changer ma réponse. – gsteiner

0

Le signe pour cent est traité comme des caractères spéciaux seulement au début et à la fin. Donc, LIKE '%%%' fonctionne très bien pour votre cas.

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

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

En regardant le source, cependant, je ne pense pas qu'il y ait un moyen d'échapper au signe pour cent si c'est le premier ou le dernier caractère, ce qui signifie que vous ne pouvez pas faire comme des requêtes pour trouver des valeurs commencer par %.

+0

Merci pour la réponse. Limites plutôt étranges. Je suppose que ce sont des bugs ou devraient être mentionnés dans les documents officiels si c'est un comportement attendu. https://issues.apache.org/jira/browse/CASSANDRA-12573 https://issues.apache.org/jira/browse/CASSANDRA-12621 – KMV