varias - ¿Hay alguna consulta para Cassandra igual que SQL: LIKE Condition?
where con 3 condiciones sql (4)
Dado que Cassandra 3.4 (3.5 recomendado), las consultas LIKE se pueden lograr utilizando un SSTable Attached Secondary Index (SASI).
Por ejemplo:
CREATE TABLE cycling.cyclist_name (
id UUID PRIMARY KEY,
lastname text,
firstname text
);
Creando el SASI de la siguiente manera:
CREATE CUSTOM INDEX fn_prefix ON cyclist_name (firstname)
USING ''org.apache.cassandra.index.sasi.SASIIndex'';
Entonces una consulta con el prefijo LIKE está funcionando:
SELECT * FROM cyclist_name WHERE firstname LIKE ''M%'';
SELECT * FROM cyclist_name WHERE firstname LIKE ''Mic%'';
Estos ejemplos y más opciones de configuración, como consultas de sufijos, se pueden encontrar en la documentation
Una explicación más detallada sobre cómo funciona SASI se puede encontrar here .
La condición LIKE
nos permite usar comodines en la cláusula where de una instrucción SQL. Esto nos permite realizar la comparación de patrones. La condición LIKE
se puede usar en cualquier declaración SQL válida: seleccionar, insertar, actualizar o eliminar. Me gusta esto
SELECT * FROM users
WHERE user_name like ''babu%'';
como la misma operación anterior, cualquier consulta está disponible para Cassandra en CLI.
Encontré esta publicación mientras buscaba una solución para ejecutar WHERE column_name LIKE ''%keyword%''
en Cassandra. Las respuestas fueron prometedoras, pero no abordaron por completo mi problema.
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''};
Para que funcione %keyword%
(dos% s) , el índice debe tener opciones con el modo: CONTAINS junto con ese analyzer_class para que case_sensitive sea efectivo.
Lo sé: es una pregunta antigua, pero hay una solución para este tema:
No se puede usar como operador en Cassandra, pero se pueden usar operadores de rango y con el operador de rango se puede resolver este "me gusta" cualquiera que sea el% "
Un ejemplo: tengo más de un producto. Cada producto tiene su propia clave de partición (primera parte de la clave principal):
CREATE TABLE user(productId int, username text, PRIMARY KEY(productId, username));
Ahora tengo algunos usuarios:
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'');
Ahora, quiero encontrar a todos los usuarios que tienen una a al principio. En un mundo SQL, uso LIKE ''a%'' en Cassandra, uso esto:
SELECT * FROM user WHERE productId = 1 AND username > ''a'' AND username < ''b'';
El resultado:
productid | username
-----------+----------
1 | alex
1 | alpha
1 | andreas
1 | anna
Respuesta simple: no hay equivalente de LIKE.
http://www.datastax.com/docs/0.8/dml/using_cql
Aquí está la referencia de comando para v0.8:
http://www.datastax.com/docs/0.8/references/cql#cql-reference
Si mantiene otro conjunto de filas que contienen referencias a un nombre de usuario:
fila: nombre de usuario: bab -> col: babu1, col: babar fila: nombre de usuario: babu -> col: babur
Efectivamente, usted está haciendo trampa al rellenar previamente todos los resultados con los que normalmente buscaría en el mundo RDBMS. El almacenamiento es barato en comparación con lo que era hace años ... por lo que este es ahora un enfoque aceptado. Es menos intensivo en la CPU y la memoria para recuperar una lista de información previamente completada.