在Cassandra中搜索列表中的多个元素

时间:2015-05-27 16:44:50

标签: search cassandra cql3

我正在学习数据模型在Cassandra中的工作原理,你可以做什么,不做什么等等。

我已经看到你可以拥有收藏品,我想知道你是否可以搜索收藏中的元素。我已经看到你可以用contains来查找一个元素,但是如果你想要查找多个元素,你需要添加更多的过滤器,有没有办法更好地做到这一点?这是一种不好的做法吗? 这是我的表定义:

CREATE TABLE data (
  group_id int,
  user timeuuid,
  friends LIST<VARCHAR>,
  PRIMARY KEY (group_id, user)
);

我知道这可以用来在列表中查找多个项目:

SELECT * FROM groups where friends contains 'bob' and friends contains 'Pete' ALLOW FILTERING;

谢谢

2 个答案:

答案 0 :(得分:3)

出于性能原因,通常不建议使用辅助索引。

通常,在Cassandra中,应遵循基于查询的建模。

所以,

这意味着另一张桌子:

 CREATE TABLE friend_group_relation (
  friend VARCHAR,
  group_id int,
  <user if needed>
  PRIMARY KEY ((friend), group_id)
  );

现在,您可以在此表中使用IN查询(推荐)或异步查询(强烈推荐,非常快速的响应)。

答案 1 :(得分:0)

您可以遵循两种不同的方法

  1. Pure cassandra:使用此处定义的集合类型的辅助索引documentation
  2. 您也可以使用Solr并针对solr创建查询以检索您的条目。虽然这可能看起来像一个更复杂的解决方案,因为它需要使用额外的工具,它将避免在Cassandra上使用二级索引。 Cassandra上的二级索引非常昂贵,根据您的架构定义可能会影响您的表现。