我正在使用datastax cassandra ver 2.0。 我们如何使用正则表达式在cassandra列中搜索值。是否有方法实现'LIKE'(如在sQL中)功能?
我已经使用以下架构创建了表。
CREATE TABLE Mapping (
id timeuuid,
userid text,
createdDate timestamp,
createdBy text,
lastUpdateDate timestamp,
lastUpdateBy text,
PRIMARY KEY (id,userid)
);
我插入了一些测试记录,如下所示。
id | userid | createdby
-------------------------------------+----------+-----------
30c78710-c00c-11e3-bb06-1553ee5e40dd | Jon | admin
3e673aa0-c00c-11e3-bb06-1553ee5e40dd | Jony | admin
441c4210-c00c-11e3-bb06-1553ee5e40dd | Jonathan | admin
我需要搜索记录,其中userid包含单词'jon'.So在结果中,我得到所有记录,包含jon,jony,jonathan。
我知道,cassandra中没有sql LIKE功能。 但有没有办法在cassandra实现它? (注意:我使用datastax-java驱动程序作为客户端api)。
答案 0 :(得分:2)
您使用的是DSE还是社区版?对于DSE,请考虑为这些类型的查询设置Solr节点。如果没有,可以使用像lucene / solr这样的东西作为cassandra之外的反向索引来实现该特定功能。如果你所拥有的都是cassandra,那么这可能会很麻烦,在这种情况下,像Ananth建议的那样有一个手动倒排索引。一种选择是保留2-3个字符前缀的行,这些前缀包含索引到分区。您可以查询这些,找到适当的客户端分区,然后针对目标数据发出另一个查询。
答案 1 :(得分:0)
你现在没有正规表达式检查cql。 cassandra的基本用法是让它像大数据存储一样运行。您要求的功能可以在您的代码部分以优化的方式完成。如果你仍然坚持这种用法,我的建议就是这个
列族1:
Id-您的用户ID的唯一ID 名称 - jonny(或您想要使用的任何名称) 组合-j,jon,jon等以及您想要的所有可能组合
查询并获取查询的相应ID
直接使用该ID我是列系列而不是名称。使用该ID进行查询。
尽量使这些操作正常化。卡桑德拉就像你的控制基地。它提供关键数据的可用性。不是SQL的灵活性。
答案 2 :(得分:0)
有一个lucene index for cassandra。您也可以在社区版上使用此功能,然后执行Regex次搜索