cassandra中的正则表达式搜索或LIKE类型功能

时间:2014-04-09 17:58:30

标签: cassandra cql3 datastax cassandra-2.0

我正在使用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)。

3 个答案:

答案 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次搜索