我正在尝试通过Cassandra中的列族进行部分搜索,类似于SQL查询,例如:SELECT * FROM columnfamily WHERE col ='val *'其中val *表示任何与至少前三个字符匹配的值' VAL”。
我在SELECT函数上读过datastax's documentation,但似乎找不到对部分WHERE标准的任何支持。有任何想法吗?
答案 0 :(得分:9)
在Cassandra中没有这样的通配符支持,但您可以通过这样的方式对数据建模,以便获得相同的最终结果。
您将获取要执行此查询的列,并将其反规范化为第二列族。此CF将有一个宽行,列名称为您要进行通配符查询的col
的值。此CF的列值可以是原始CF的行键,也可以是原始行的其他表示形式。
然后你会使用切片来获得你关心的值。例如,如果这是要切片的宽行:
+---------+----------+--------+----------+---------+--------+----------+
| RowKey | aardvark | abacus | abacuses | abandon | accent | accident |
| +----------+--------+----------+---------+--------+----------+
| | | | | | | |
| | | | | | | |
+---------+----------+-----------------------------+--------+----------+
使用CQL,您可以使用此查询*:
选择以'aba *'开头的所有内容 SELECT 'aba'..'abb' from some_cf where RowKey = some_row_key;
这会为您提供“算盘”,“算盘”和“放弃”的列。
有一些事情需要注意这个策略:
word
:some_unique_value
的复合列来实现此目的。请记住,Cassandra并没有为您提供简单的方法来进行即席查询。相反,您需要弄清楚如何使用数据并相应地为CF建模。有关如此建模数据的更多信息,请查看Ed Anuff在indexing data in Cassandra上发布的这篇博客文章。
*请注意,即将发布的Cassandra版本中切片列的CQL语法正在发生变化。