我的表:
CREATE TABLE user_position (
geopart text, // first 3 characters of geohash
geohash text,
datetime timestamp,
userId bigint,
PRIMARY KEY ((geopart), geohash, datetime, user_id)
);
我的虚拟查询:
select * from user_position where geopart = 'abc' and geohash > 'a' and geohash < 'z' and datetime >= '2015-08-08 15:08:58+0530';
错误:
Bad Request: PRIMARY KEY column "datetime" cannot be restricted (preceding column "geohash" is restricted by a non-EQ relation)
问题:
我做错了什么?如果在Cassandra中无法使用多列的范围,那么我该如何实现呢?
答案 0 :(得分:5)
Cassandra在查询时非常严格,因为它不像RDBMS那样通用。您无法在Cassandra中对多个列执行范围查询。以下规则也适用:
所有这些规则都是为了避免人们在Cassandra中运行反模式。
您必须在多个列上执行范围查询并拥有更强大的检索数据方法的一个选项是与Solr等搜索平台集成。