Cassandra:根据集合 collection 中的值查询时出错

Cassandra: error when querying based on a value in a set collection

我有一个名为 place_ratings 的 table,列为 headers rating_idplace_idplace_nameplace_rating, 和 cuisines.

主键是rating_id,是一个整数

place_id 是一个整数,place_rating.

也是一个整数

place_name 是文本类型。

cuisines 是文本类型的集合 collection。

table中一行的示例数据如下:

rating_id = 5

place_id = 658

place_name = 'Bobbys Burgers'

place_rating = 10

cuisines = { 'Burgers', 'Chips', 'Milkshakes' }

我正在尝试向 return 菜系仅 'Pizzeria' 的所有行编写查询。

这是我的代码:

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"

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

谢谢!

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

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

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