这是 cassandra 有意设计的功能。不能对不存在的列使用 WHERE 子句进行查询
这是因为您的数据围绕 cassandra 节点环进行分区。您希望避免要求整个环返回您的查询的答案。理想情况下,您希望能够从环中的单个节点检索数据
一般来说,在 cassandra 中,您希望构建表来匹配您的查询,而不是关系规范化。所以你有几种选择来处理这个问题。
1)将数据写入多个表以支持各种查询。在你的情况下,你可能想创建第二个表
CREATE TABLE my_table (
my_field2 text,
my_field text,
PRIMARY KEY (my_field2)
);
然后你的第一个查询将正确返回
2)使用复合键创建表,如下所示
CREATE TABLE my_table (
my_field text,
my_field2 text,
PRIMARY KEY (my_field, my_field2)
);
使用此方法,如果您没有为 my_field 指定查询值,那么您将需要在查询后附加限定符,以告诉 cassandra 您确实想要查询整个环
SELECT * FROM my_table WHERE my_field2 IN ('A', 'B') ALLOW FILTERING;
-edit-
您不能使用二级索引来搜索多个值。根据 CQL 文档
http://www.datastax.com/documentation/cql/3.0/webhelp/cql/ddl/ddl_primary_index_c.html http://www.datastax.com/documentation/cql/3.0/webhelp/cql/ddl/ddl_primary_index_c.html
“索引是一种数据结构,可以快速、高效地查找与给定条件匹配的数据。”
因此,您必须为其赋予一个且仅有一个值。