无论如何,是否可以在非主键的NoSQL Command中使用LIKE?

时间:2019-06-04 13:36:56

标签: cassandra nosql cql cassandra-3.0

我正在使用非主键上的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."

1 个答案:

答案 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肯定不是关系数据库。根本不是为了处理查询而引起的查询,这些查询会花费大量的网络时间来轮询多个节点以获取数据。