尝试编写一个查询,该查询将使用astyanax客户端和RowSliceQuery对列族中的所有行进行分页。
keyspace.prepareQuery(COLUMN_FAMILY).getKeyRange(null, null, null, null, 100);
使用hector成功完成此操作,其中第一次调用使用空开始和结束键完成。检索第一页后,我使用结果中的最后一个键来查询第二页等。这是使用hector的第一页的代码。
HFactory.createRangeSlicesQuery(keyspace,
LongSerializer.get(), new CompositeSerializer(),
BytesArraySerializer.get())
.setColumnFamily(COLUMN_FAMILY)
.setRange(null, null, false, 100).setRowCount(100);
现在,当我尝试使用astyanax执行此操作时,我收到有关null和非null键和令牌的错误。不确定此查询中的令牌是做什么的。此外,我可以使用allRows(),但希望使用键范围查询,因为它给了我更多的灵活性。
是否有人使用astyanax进行关键范围查询的示例?我不能在"开始"中找到一个例子。文档或网上的其他任何地方。
谢谢! 安东
答案 0 :(得分:0)
您所指的是getRowRange
方法:
keyspace.prepareQuery(CF_STANDARD1)
.getRowRange(startKey, endKey, startToken, endToken, count)
但请注意,仅在使用ByteOrderedPartitioner时才有效。因为默认情况下Cassandra使用Murmur3Partitioner,这通常不起作用。建议使用索引来执行此操作。 Astyanax还提供reverse index search配方,该配方利用第二列系列将您的密钥存储为列,以便对原始数据进行有效范围搜索。
答案 1 :(得分:-1)
检查此示例代码。我希望这段代码可以帮助你进行分页。
IndexQuery<String, String> query = keyspace
.prepareQuery(CF_STANDARD1).searchWithIndex()
.setRowLimit(10).autoPaginateRows(true).addExpression()
.whereColumn("Index2").equals().value(42);
最佳,