我想知道如何使用Cassandra实现分页.
我们说我有一个博客.该博客每页最多列出10个帖子.要访问下一篇文章,用户必须单击分页菜单才能访问第2页(帖子11-20),第3页(帖子21-30)等.
在MySQL下使用SQL,我可以执行以下操作:
SELECT * FROM posts LIMIT 20,10;
Run Code Online (Sandbox Code Playgroud)
LIMIT的第一个参数从结果集的开头偏移,第二个参数是要获取的行数.上面的示例从第20行开始返回10行.
如何在CQL中实现相同的效果?
我在Google上找到了一些解决方案,但所有这些解决方案都需要"以前查询的最后结果".它适用于将"下一个"按钮分页到另一个10结果集,但如果我想从第1页跳到第5页怎么办?
我有一个list类型(标签)列的表:
CREATE TABLE "Videos" (
video_id UUID,
title VARCHAR,
tags LIST<VARCHAR>,
PRIMARY KEY (video_id, upload_timestamp)
) WITH CLUSTERING ORDER BY (upload_timestamp DESC);
Run Code Online (Sandbox Code Playgroud)
我有很多行包含列中的各种值tags,即.["outdoor","funny cats","funny mice"].
我想执行一个SELECT查询,该查询将返回列中包含"有趣的猫"的所有行tags.我怎样才能做到这一点?
使用类型now()函数时遇到麻烦timestamp.
请看下面的代码:
表创建:
CREATE TABLE "Test" (
video_id UUID,
upload_timestamp TIMESTAMP,
title VARCHAR,
views INT,
PRIMARY KEY (video_id, upload_timestamp)
) WITH CLUSTERING ORDER BY (upload_timestamp DESC);
Run Code Online (Sandbox Code Playgroud)
有问题的INSERT查询:
INSERT INTO "Test" (video_id, upload_timestamp, title, views)
VALUES (uuid(), now(), 'Test', 0);
Run Code Online (Sandbox Code Playgroud)
INSERT查询似乎对我来说很好.但是,当我执行它时,我看到以下错误:
Unable to execute CQL script on 'XXX': cannot assign result of function now (type timeuuid) to upload_timestamp (type timestamp)
我在这做错了什么?
我使用DataStax Enterprise 4.5.2
我试图用PreparedStatement与solr_query使用下面的代码:
PreparedStatement preparedStatement = cassandraSession.prepare(
"SELECT * FROM users WHERE solr_query = 'username:? OR email:?';"
);
BoundStatement boundStatement = new BoundStatement(preparedStatement);
ResultSet results = cassandraSession.execute(
boundStatement.bind(
username,
email
)
);
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,我得到以下异常:
java.lang.IllegalArgumentException: Prepared statement has only 0 variables, 2 values provided
如何正确使用solr_query的预准备语句?
我使用的是DataStax Enterprise 4.5.3,它使用Cassandra 2.0.11.82和Solr 4.6.0.2.8.我正在使用DataStax Java驱动程序.