使用集合类型的Cassandra二级索引

时间:2013-01-02 20:23:32

标签: cassandra cql3

这是一张cassandra表:

CREATE TABLE Account(
id uuid,
userRef uuid,
name map<text, text>,
dataStatus text,
dataVisibility text,
...
PRIMARY KEY( id, dataStatus, dataVisibility, userRef)
)
CREATE INDEX idx_xxx_account_name ON Account (name);

'name'是(集合)类型'map'的cql3列。我的问题是:是否可以在地图类型上创建二级索引,即名称?

感谢。

5 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

你的问题很老了。在cassandra 2.1中,有效的语法是

CREATE INDEX on Account(keys(name));

答案 2 :(得分:0)

没有回应?我决定按如下方式重写表格:

CREATE TABLE Account(
id uuid,
userRef uuid,
**main_name text,**
**other_name map<text, text>,**
dataStatus text,
dataVisibility text,
...
PRIMARY KEY( id, dataStatus, dataVisibility, userRef)
)
CREATE INDEX idx_xxx_account_name ON Account (main_name);

* _ name可以是任何内容,例如电子邮件,电话等。例如,main_name可以是必需的,而other_name可以是可选的。

无论如何,我现在可以将main_name索引为“文本”类型而不是文本值的映射。

答案 3 :(得分:0)

回答你的初步问题:

  

尚未支持集合上的二级索引。具体而言,您可以将一组标记与用户关联,但您无法通过其标记自动为用户编制索引。在路线图上明确添加这种支持,但仍有待实施。   Coming in 1.2: Collections support in CQL3

另外,我不太明白你为什么使用地图?为什么不是一个简单的集合或列表?请看下面提供的参考资料。

答案 4 :(得分:0)

create index idx_name on Account(ENTRIES(name))

这是用于访问地图中具有特定条目的行。