1

我正在使用 datastax cassandra 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

我需要搜索记录,其中用户 ID 包含单词“jon”。所以在结果中,我得到所有记录,包含 jon、jony、jonathan。

我知道,cassandra 中没有 sql LIKE 功能。但是有没有办法在 cassandra 中实现它?(注意:我使用 datastax-java 驱动程序作为客户端 api)。

4

3 回答 3

2

您使用的是 DSE 还是社区版?对于 DSE,请考虑为这些类型的查询使用 Solr 节点。如果没有,也许可以使用 lucene / solr 之类的东西作为 cassandra 之外的倒排索引来实现该特定功能。如果您所拥有的只是设置 cassandra,那可能会很麻烦,在这种情况下,请按照 Ananth 的建议进行手动倒排索引。一种选择是保留包含分区索引的 2-3 个字符前缀行。您可以查询这些,找到适当的分区客户端,然后针对目标数据发出另一个查询。

于 2014-07-23T21:51:44.490 回答
1

cassandra有一个lucene 索引。您也可以在社区版上使用它并执行正则表达式搜索

于 2017-07-05T03:58:20.740 回答
0

您现在没有在 cql 中检查正则表达式。cassandra 的基本用途是让它像大数据存储一样工作。您要求的那种功能可以在您的代码部分中以优化的方式完成。如果您仍然坚持这种用法,我的建议是

列族 1:

Id - 您的用户 ID 的唯一 ID 名称 - jonny(或您想使用的任何名称)组合 - j、jon、jon 等以及您想要的所有可能组合

查询这个并为您的查询获取适当的 id

在列族中使用该 id 而不是直接使用名称。使用该 ID 进行查询。

尽量将此类操作标准化。Cassandra 就像你控制的基地。它提供了关键数据的可用性。不是 SQL 的灵活性。

于 2014-04-10T03:42:09.267 回答