无论如何在非主键的NoSQL命令中使用LIKE?
Is there anyway to use LIKE in NoSQL Command on non primary Key?
我在非主键上使用 LIKE 运算符从 Cassandra 数据库中进行选择。
select * from "TABLE_NAME" where "Column_name" LIKE '%SpO%' ALLOW FILTERING;
Error from server: code=2200 [Invalid query] message="LIKE restriction is only
supported on properly indexed columns. parameter LIKE '%SpO%' is not valid."
简单地说,"yes" 有一种方法可以在 non-Primary 关键组件上使用 LIKE
进行查询。您可以使用 SASI(存储附加二级索引)索引来执行此操作。这是一个简单的例子:
CREATE TABLE testLike (key TEXT PRIMARY KEY, value TEXT) ;
CREATE CUSTOM INDEX valueIdx ON testLike (value)
USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS={'mode':'CONTAINS'};
由于您的查询需要在 列中匹配字符串 ,而不仅仅是前缀或后缀,因此您需要在创建索引时传递 CONTAINS
选项.
写入一些数据后,你的查询对我有效:
> SELECT * FROM testlike WHERE value LIKE '%SpO%';
key | value
-----+--------------
C | CSpOblahblah
D | DSpOblahblah
(2 rows)
警告!!!
此查询效率极低,并且可能会在大型集群中超时,除非您还在 WHERE
子句中按分区键进行过滤。重要的是要理解,虽然此功能的工作方式与关系数据库相似,但 Cassandra 绝对不是 关系数据库。它根本不是为了处理会导致大量网络时间轮询多个节点以获取数据的查询而设计的。
我在非主键上使用 LIKE 运算符从 Cassandra 数据库中进行选择。
select * from "TABLE_NAME" where "Column_name" LIKE '%SpO%' ALLOW FILTERING;
Error from server: code=2200 [Invalid query] message="LIKE restriction is only
supported on properly indexed columns. parameter LIKE '%SpO%' is not valid."
简单地说,"yes" 有一种方法可以在 non-Primary 关键组件上使用 LIKE
进行查询。您可以使用 SASI(存储附加二级索引)索引来执行此操作。这是一个简单的例子:
CREATE TABLE testLike (key TEXT PRIMARY KEY, value TEXT) ;
CREATE CUSTOM INDEX valueIdx ON testLike (value)
USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS={'mode':'CONTAINS'};
由于您的查询需要在 列中匹配字符串 ,而不仅仅是前缀或后缀,因此您需要在创建索引时传递 CONTAINS
选项.
写入一些数据后,你的查询对我有效:
> SELECT * FROM testlike WHERE value LIKE '%SpO%';
key | value
-----+--------------
C | CSpOblahblah
D | DSpOblahblah
(2 rows)
警告!!!
此查询效率极低,并且可能会在大型集群中超时,除非您还在 WHERE
子句中按分区键进行过滤。重要的是要理解,虽然此功能的工作方式与关系数据库相似,但 Cassandra 绝对不是 关系数据库。它根本不是为了处理会导致大量网络时间轮询多个节点以获取数据的查询而设计的。