cassandra - Cassandra:根据集合中的值进行查询时出错
问题描述
我有一个place_ratings
带有列标题rating_id
、、、、place_id
和place_name
的表place_rating
。cuisines
主键是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"
我需要对代码进行哪些更改才能使查询正确运行?
谢谢!
解决方案
您可以为该列创建二级索引,然后使用此索引进行搜索(有关更多信息,请参阅文档):
CREATE INDEX cousine_idx ON place_ratings ( cuisines );
SELECT * FROM place_ratings WHERE cuisines CONTAINS 'Pizzeria';
但通常此类查询不适合 Cassandra,因为它们需要扫描所有节点上的数据以找到包含数据的实际行 - 因为您没有提供分区键。虽然如果您对分区键添加限制,例如在特定城市搜索比萨店,那么它会更好地工作。
推荐阅读
- php - 如何在 laravel 缓存中每次更新后重置缓存
- list - Haskell 访问类型类参数问题
- google-chrome-extension - chrome.tabs.sendMessage :错误处理响应
- algorithm - 具有开放寻址的插入哈希表顺序的独立性
- css - Chrome 和 Firefox 中的 CSS 网格行为不同
- c# - 将文本框输入限制为仅操作符符号
- apache-flink - Flink 序列化:POJO 类型与 GenericType
- javascript - 如何将拖放的图像转换为 OpenLayers 中的特征
- php - 计算laravel中页面的访问者
- utf-8 - 我正在尝试使用 LiteDb,如何在数据库中保存希伯来语或其他非英语语言