我正在使用非主键上的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."
答案 0 :(得分:0)
简单地说,是,有一种方法可以在非主键组件上使用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肯定不是关系数据库。根本不是为了处理查询而引起的查询,这些查询会花费大量的网络时间来轮询多个节点以获取数据。