我正在使用Cassandra。有一个列名称 - 文本存储所有说的用户名。
name
------
bob
Bob
bobby
mike
michael
micky
BOB
我有两个问题
提前致谢。
答案 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;