【问题标题】:Cassandra: filtering based one specific value in a setCassandra:基于集合中的一个特定值进行过滤
【发布时间】:2020-10-06 16:48:56
【问题描述】:

我在 Cassandra 中有一个数据表,其中一列是:

customer_favourites,每个值都是set类型,它有每个客户最喜欢的食物的详细信息。例如,一个客户可能有{'Mexican', 'Italian', 'Indian'},另一个客户可能有{'Mexican', 'French'},另一个客户可能有{'Mexican'}

我有以下代码:

SELECT customer_id, customer_fname, customer_lname FROM customers WHERE customer_favourites CONTAINS ‘Mexican’ ALLOW FILTERING;

我希望它过滤那些最喜欢的食物只有墨西哥的顾客,但现在它正在返回每个把墨西哥作为他们最喜欢的食物之一的顾客的详细信息。如何过滤我的查询以返回只喜欢墨西哥食物的客户?

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    幼稚的做法:你需要使用customer_favourites = {'Mexican'}...

    更好的方法——在对应的字段上创建二级索引using the FULL keyword,然后使用customer_favourites = {'Mexican'}

    最佳方法 - 以customer_favourites 作为分区键创建一个单独的表,并在其中搜索用户(列应为frozen)。这种方法的问题之一是数据偏差,因为最喜欢的食物数量相对较少,而且非常不平衡。

    替代方法 - 如果您需要经常使用非分区键搜索,请重新考虑使用 Cassandra。

    【讨论】:

      猜你喜欢
      • 2021-06-08
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      • 2021-02-28
      • 2015-03-06
      • 1970-01-01
      相关资源
      最近更新 更多