如何解决Cassandra:基于集合集合中的值进行查询时出错
我有一个名为place_ratings
的表,其中包含列标题rating_id
,place_id
,place_name
,place_rating
和cuisines
。 / 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,因为它们需要扫描所有节点上的数据以查找包含数据的实际行-因为您没有提供分区键。尽管如果您要对分区键添加限制(例如,在特定城市中搜索比萨店),则效果会更好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。