【问题标题】:Cassandra: error when querying based on a value in a set collectionCassandra:根据集合中的值进行查询时出错
【发布时间】:2020-09-27 10:45:15
【问题描述】:

我有一个名为place_ratings 的表,其列标题为rating_idplace_idplace_nameplace_ratingcuisines

主键是rating_id,是一个整数。

place_id 是一个整数,place_rating 也是。

place_name 是文本类型。

cuisines 是文本类型的集合。

表格中某一行的样本数据如下:

rating_id = 5

place_id = 658

place_name = '鲍比汉堡'

place_rating = 10

cuisines = {“汉堡”、“薯条”、“奶昔”}

我正在尝试编写一个查询来返回所有只有“比萨店”美食的行。

这是我的代码:

SELECT place_id, place_name, place_rating FROM place_ratings WHERE cuisines = { 'Pizzeria' };

但是,我收到以下错误消息:

InvalidRequest: Error from server: code=2200 [Invalid query] message="Collection column 'cuisines' (set<text>) cannot be restricted by a '=' relation"

我需要对我的代码进行哪些更改才能使我的查询正确运行?

谢谢!

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    您可以为该列创建二级索引,然后使用该索引进行搜索(参见documentation for more information):

    CREATE INDEX cousine_idx ON place_ratings ( cuisines );
    SELECT * FROM place_ratings WHERE cuisines CONTAINS 'Pizzeria';
    

    但通常此类查询不适合 Cassandra,因为它们需要扫描所有节点上的数据以找到包含数据的实际行 - 因为您没有提供分区键。虽然如果你对分区键添加限制,例如搜索特定城市的比萨店,那么它会更好。

    【讨论】:

      猜你喜欢
      • 2015-08-02
      • 2019-06-18
      • 2012-05-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 2015-10-09
      相关资源
      最近更新 更多