我正在使用Cassandra 1.2.25和cqlsh,所有CQL语句都是CQL3。我正在创建一个CF,然后在列上添加一个二级索引。在我添加二级索引(如下所述:http://www.datastax.com/docs/1.1/ddl/indexes)后,我希望UPDATE语句能够使用WHERE子句中的二级索引列。可悲的是,他们没有。
创建表架构:
CREATE TABLE注册表( referencesetid uuid, referenceid uuid, acquire byendpoint uuid, 姓名文字, PRIMARY KEY(referencesetid,referenceid) )
添加了索引:
CREATE INDEX nameidx ON注册表(名称);
插入一行:
INSERT INTO注册表(referenceSetId,referenceId,acquiredByEndpoint,name)VALUES(96ade698-09c5-46f0-beb4-b842e5352bc8,a97c6163-f4bc-4eaf-a7e0-700578bdc44c,00000000-0000-0000-0000-000000000000,'John' );
执行更新查询(在WHERE子句中我指的是nameidx,因为这是索引字段'name'的名称):
UPDATE注册表SET acquiredbyendpoint = 00000000-0000-0000-0000-000000000001 WHERE nameidx ='John'AND referencesetid = 36da89c3-f256-4d56-83c0-37569311a8a0;
错误:
错误请求:未知密钥标识符nameidx
有没有人有任何建议我做错了什么?
它可能不太明显(即配置文件或C *版本),因为C *索引文档在我看来很简单。
干杯 保罗。
答案 0 :(得分:4)
正如您在顶部所说,Cassandra不支持UPDATE,WHERE子句中的字段是索引字段。您只能使用主键字段进行更新。
此外,该字段仍称为名称,索引名称不用于索引查找。