gpt4 book ai didi

Cassandra (Pycassa/CQL) 返回部分匹配

转载 作者:行者123 更新时间:2023-12-04 23:06:52 25 4
gpt4 key购买 nike

我正在尝试通过 Cassandra 中的列族进行部分搜索,类似于 SQL 查询,例如:SELECT * FROM columnfamily WHERE col = 'val*' 其中 val* 表示至少匹配前三个字符 'val' 的任何值。

我已阅读 datastax's documentation在 SELECT 函数上,但似乎找不到对部分 WHERE 标准的任何支持。有任何想法吗?

最佳答案

在 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;

这将为您提供“算盘”、“算盘”和“放弃”列。

使用此策略需要注意以下几点:
  • 在上面的例子中,如果你有相同 column_name 的东西,你需要有一些方法来区分它们(否则插入宽列族会破坏其他有效值)。一种方法是使用 word 的复合列。 :some_unique_value .
  • 上述模型只允许在字符串末尾使用通配符。字符串开头的通配符也可以通过一些修改轻松处理。字符串中间的通配符将更具挑战性。

  • 请记住,Cassandra 并没有为您提供进行即席查询的简单方法。相反,您需要弄清楚您将如何使用数据并相应地为您的 CF 建模。在 indexing data in Cassandra 上查看 Ed Anuff 的这篇博文有关对此类数据进行建模的更多信息。

    *请注意,在即将发布的 Cassandra 版本中,用于切片列的 CQL 语法正在发生变化。

    关于Cassandra (Pycassa/CQL) 返回部分匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10048506/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com