如何使用datastax驱动程序会话在cassandra中使用order by创建cql查询?

如何使用datastax驱动程序会话在cassandra中使用order by创建cql查询?,cassandra,cql,datastax,Cassandra,Cql,Datastax,我正在尝试做以下事情: private val preparedFindQuery = session.prepare { s""" |SELECT hash, art_index, operating_system, height, width, resolution, orientation, brand, model, networktype, network, aggcount |FROM $keyspace.$table |WHERE hash = :hash

我正在尝试做以下事情:

private val preparedFindQuery = session.prepare {
s"""
   |SELECT hash, art_index, operating_system, height, width, resolution, orientation, brand, model, networktype, network, aggcount
   |FROM $keyspace.$table
   |WHERE hash = :hash
   |  AND art_index >= :from_art_index
   |  AND art_index <= :to_art_index
   |  ORDER BY :orderCol :order
 """.stripMargin.trim
}
private val preparedFindQuery=session.prepare{
s“”
|选择哈希、艺术索引、操作系统、高度、宽度、分辨率、方向、品牌、型号、网络类型、网络、聚集计数
|来自$keyspace.$table
|其中hash=:hash
|艺术索引>=:来自艺术索引

|和art_index不能为“order by”条件使用命名参数,因为它需要列名而不是值/绑定标记(?,:name)。您需要在部分准备好的语句中提供您希望按其排序数据的实际列名,正如BryceAtNetwork23所述,某些列无法按其排序。

您可以基于Lucene framework创建自定义索引(只是一个库),然后按您想要的任何列进行排序,例如:

SELECT * FROM tweets WHERE expr(tweets_index, '{
filter : [ {type: "range", field: "time", lower: "2014/04/25", upper: "2014/05/01"},
           {type: "prefix", field: "user", value: "a"} ],
query : {type: "phrase", field: "body", value: "big data gives organizations", slop: 1},
sort : {field: "time", reverse: true}') limit 100;

在此处查找详细信息和示例

您唯一可以通过ORDER BY更改的是排序方向(ASC/DESC)。因此,如果您的默认聚类顺序对于您的查询是正确的,那么您甚至不需要在此处按顺序排列。如果我在特定列上添加索引,会怎么样?我仍然可以按它排序吗?不。好的,谢谢您的解释,我想我可以这样做:)
SELECT * FROM tweets WHERE expr(tweets_index, '{
filter : [ {type: "range", field: "time", lower: "2014/04/25", upper: "2014/05/01"},
           {type: "prefix", field: "user", value: "a"} ],
query : {type: "phrase", field: "body", value: "big data gives organizations", slop: 1},
sort : {field: "time", reverse: true}') limit 100;