2012-10-06 39 views
3

试图编写一个查询,该查询将使用astyanax客户端和RowSliceQuery在列族中的所有行进行分页。Astyanax键范围查询

keyspace.prepareQuery(COLUMN_FAMILY).getKeyRange(null, null, null, null, 100); 

使用hector成功完成此操作,其中第一次调用是使用null开始和结束键完成的。在检索第一页后,我使用结果中的最后一个键来查询第二页等。这是使用hector的第一页的代码。

HFactory.createRangeSlicesQuery(keyspace, 
LongSerializer.get(), new CompositeSerializer(), 
BytesArraySerializer.get()) 
.setColumnFamily(COLUMN_FAMILY) 
.setRange(null, null, false, 100).setRowCount(100); 

现在,当我试图用astyanax我得到关于空和非null键和令牌错误做到这一点。不确定在此查询中使用什么标记。此外,我可以使用allRows(),但希望使用键范围查询来做到这一点,因为它给了我更多的灵活性。

有没有人有使用astyanax键范围查询的例子?我无法在“入门”文档或网络中的任何其他地方找到示例。

谢谢! Anton

回答

-1

检查此示例代码。我希望这段代码能帮助你进行分页。

IndexQuery<String, String> query = keyspace 
    .prepareQuery(CF_STANDARD1).searchWithIndex() 
    .setRowLimit(10).autoPaginateRows(true).addExpression() 
    .whereColumn("Index2").equals().value(42); 

最佳,

+0

不,他想分页行键,不做索引搜索。 –

0

什么你指的是getRowRange方法:但是所使用的ByteOrderedPartitioner时,这只有

keyspace.prepareQuery(CF_STANDARD1) 
    .getRowRange(startKey, endKey, startToken, endToken, count) 

注意。由于默认情况下Cassandra使用Murmur3Partitioner,这通常不起作用。建议使用索引来完成此操作。 Astyanax还提供reverse index search配方,该配方利用第二列系列将您的密钥存储为列,以便对原始数据进行有效的范围搜索。