在 Cassandra 中按地图值查询

Iva*_*gin 4 cassandra nosql

假设我有这样的列族:

CREATE TABLE test(
id text,
meta map <text, text>,
PRIMARY KEY (key)
);
Run Code Online (Sandbox Code Playgroud)

然后我将一些数据放入我的映射中,例如: {'username' : 'ivan'}

我想通过映射中的元素查询我的测试列族。像这样的东西:

SELECT * FROM test WHERE meta['username'] = 'ivan';

根据 cassandra文档,这应该是可能的:

顾名思义,地图将一件事映射到另一件事。映射是一个名称和一对键入的值。使用映射类型,您可以在用户配置文件中存储与时间戳相关的信息。映射的每个元素在内部存储为一个 Cassandra 列,您可以修改、替换、删除和查询该列。

但我在网上找不到任何这样的例子,所以这真的可能吗?

谢谢,伊万

小智 5

您需要添加二级索引来按键或值查询地图:

CREATE INDEX meta_idx ON test (ENTRIES(meta));
SELECT * FROM test WHERE meta['username'] = 'ivan';
Run Code Online (Sandbox Code Playgroud)

也可以看看:

https://docs.datastax.com/en/cql/3.3/cql/cql_using/useIndexColl.html