【问题标题】:Searching in collection of tuple - Cassandra在元组集合中搜索 - Cassandra
【发布时间】:2017-12-15 02:24:54
【问题描述】:

这是我的数据:-

CREATE TABLE collect_things(k int PRIMARY KEY,n set<frozen<tuple<text, text>>>);

INSERT INTO collect_things (k, n) VALUES(1, {('hello', 'cassandra')});

CREATE INDEX n_index  ON collect_things  (n);

现在我必须像这样查询:-

SELECT * FROM collect_things WHERE n contains ('cassandra')  ALLOW FILTERING ;

输出:-

 k | n
---+---------

预期输出:-

k | n
---+---------
 1 | {('hello', 'cassandra')}

我想用 'cassandra' 值获取我的数据。这可能吗 ?

【问题讨论】:

    标签: cassandra spring-data-cassandra


    【解决方案1】:

    必须将 Collection 中的元组定义为冻结。

    冻结值将多个组件序列化为单个值。非冻结类型允许更新单个字段。 Cassandra 将冻结类型的值视为 blob。必须覆盖整个值。

    您必须将 freeze 视为单个值,并且不能将它们分开。所以查询时提供完整的冻结元组('hello', 'cassandra')

    SELECT * FROM collect_things WHERE n CONTAINS ('hello', 'cassandra');
    

    如果你有数据:

     k | n
    ---+---------------------------------------------
     1 | {('hello', 'cassandra'), ('test', 'seach')}
     2 |                         {('test', 'seach')}
    

    输出:

     k | n
    ---+---------------------------------------------
     1 | {('hello', 'cassandra'), ('test', 'seach')}
    

    来源:https://docs.datastax.com/en/cql/3.1/cql/cql_reference/collection_type_r.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-13
      • 2019-03-10
      • 2022-11-27
      • 2016-08-28
      • 1970-01-01
      • 2016-02-12
      • 2018-04-11
      • 2020-02-04
      相关资源
      最近更新 更多