Cassandra:如何检查列值是否已存在

时间:2014-03-21 13:22:03

标签: cassandra cql cql3

我正在使用Cassandra。有一个列名称 - 文本存储所有说的用户名。

name
------
bob
Bob
bobby
mike
michael
micky
BOB

我有两个问题

  1. 我必须选择所有以' bo'开头的用户名。我知道卡桑德拉没有相同的东西。但无论如何要实现这一目标吗? (附加栏是一个选项,但还有其他什么吗?)
  2. 共有3个条目。鲍勃,鲍勃和鲍勃。如果我通过name =' bob'那么无论如何都要使用获取所有3行。我需要获取不区分大小写的名称。
  3. 提前致谢。

1 个答案:

答案 0 :(得分:2)

让我们先从第二个问题开始。如果要支持不区分大小写的查询,则应在另一列中存储要搜索的文本数据的第二个大写副本。然后通过查询该列,您将能够执行不区分大小写的请求。

返回搜索bo*。最好的方法是使用一个模式,允许您利用群集列(主键的第2列和更高的列)进行范围搜索。这是一个例子:

CREATE TABLE t1 (region INT, name TEXT, PRIMARY KEY (region, name)); 

特别是,如果您将name设为密钥的第二列,则可以执行

等搜索
SELECT * FROM t1 WHERE name >= 'bo' and name < 'bp' ALLOW FILTERING;

将返回您正在寻找的结果。这仅适用于尾随通配符:前导字符必须是常量才能使范围查询起作用。同样,如果您想进行不区分大小写的搜索,请将不区分大小写的列作为主键的第二部分并按其进行查询:

SELECT * FROM t1 WHERE name_upper >= 'BO' and name_upper < 'BP' ALLOW FILTERING;