Cassandra:基于集合集合中的值进行查询时出错

问题描述

我有一个名为place_ratings的表,其中包含列标题rating_idplace_idplace_nameplace_ratingcuisines。 / p>

主键是rating_id,它是一个整数。

place_id一个整数,place_rating也是如此。

place_name是文本类型。

cuisines是一组文本类型的集合。

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

rating_id = 5

place_id = 658

place_name ='Bobbys Burgers'

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"

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

谢谢!

解决方法

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

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

但是通常这样的查询不适用于Cassandra,因为它们需要扫描所有节点上的数据以查找包含数据的实际行-因为您没有提供分区键。尽管如果您要对分区键添加限制(例如,在特定城市中搜索比萨店),则效果会更好。