首页 > 解决方案 > Cassandra:根据集合中的值进行查询时出错

问题描述

我有一个place_ratings带有列标题rating_id、、、、place_idplace_name的表place_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"

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

谢谢!

标签: cassandracql

解决方案


您可以为该列创建二级索引,然后使用此索引进行搜索(有关更多信息,请参阅文档):

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

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


推荐阅读