这是一张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列。我的问题是:是否可以在地图类型上创建二级索引,即名称?
感谢。
答案 0 :(得分:1)
从Cassandra 1.2.6开始,支持集合上的自定义索引。
答案 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))
这是用于访问地图中具有特定条目的行。