Cassandra:根据集合 collection 中的值查询时出错
Cassandra: error when querying based on a value in a set collection
我有一个名为 place_ratings
的 table,列为 headers rating_id
、place_id
、place_name
、place_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,因为它们需要扫描所有节点上的数据以找到包含数据的实际行 - 因为您没有提供分区键。不过,如果您对分区键添加限制,例如,搜索特定城市的比萨饼店,那么效果会更好。
我有一个名为 place_ratings
的 table,列为 headers rating_id
、place_id
、place_name
、place_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,因为它们需要扫描所有节点上的数据以找到包含数据的实际行 - 因为您没有提供分区键。不过,如果您对分区键添加限制,例如,搜索特定城市的比萨饼店,那么效果会更好。