3

这是一个 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);

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

谢谢。

4

5 回答 5

1

从 Cassandra 1.2.6 开始,支持集合上的自定义索引。

https://git-wip-us.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=refs/tags/cassandra-1.2.6

于 2013-08-23T08:20:15.040 回答
1

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

CREATE INDEX on Account(keys(name));

于 2015-04-12T19:17:42.117 回答
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 索引为“文本”类型,而不是文本值的映射。

于 2013-01-03T12:08:40.650 回答
0

要回答您最初的问题:

尚不支持集合上的二级索引。具体来说,您可以将一组标签与用户相关联,但您还不能按用户的标签自动索引用户。添加该支持已明确在路线图上,但仍有待实施。 1.2 中的到来:CQL3 中的集合支持

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

于 2013-06-27T10:59:03.917 回答
0
create index idx_name on Account(ENTRIES(name))

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

于 2016-02-01T15:03:31.247 回答