与Queryslice.setrange混淆

时间:2013-04-09 20:08:38

标签: cassandra hector

我是cassandra和hector的新手。现在我正在尝试检索我存储在cassandra中的一些数据。有很多列,其中一些有前缀。

column1 column2 column3 prefix1_prefix2_column3 prefix1_prefix2_column4 ....等等。

现在我想获取带有prefix1_prefix2 _

的所有列 然而,我得到的比我想要的更多,其他一些专栏也是回归。

CF比较器是bytestype,我也试过utf8类型,它不起作用。

以下是我的代码,

SliceQuery<UUID, String, ByteBuffer> query = HFactory.createSliceQuery(
                keyspace, UUIDSerializer.get(), stringSerializer,
                ByteBufferSerializer.get());
        String columnPrifx = "prefix1_prefix2";
        query.setKey(keyuuid).setColumnFamily("UserLogin");

    query.setRange(columnPrifx, columnPrifx, false, Integer.MAX_VALUE);
    //query.setRange(columnPrifx, null, false, Integer.MAX_VALUE);
            //i also tried null above
    ColumnSliceIterator<UUID, String, ByteBuffer> iterator = new ColumnSliceIterator<UUID, String, ByteBuffer>(
            query, null, "\uFFFF", false);


    while (iterator.hasNext()) {

        HColumn<String, ByteBuffer> c = iterator.next();
        System.out.println(c.getName());


    }

所以,这一切,我的专栏数量超出了我的预期......任何人都可以帮助我吗? 非常感谢你

1 个答案:

答案 0 :(得分:0)

生成密钥时不要连接字符串,尝试将列名拆分为复合键,如“prefix1_prefix2_”和“column3”。现在,如果您获取如下所示的数据,您将获得结果

Composite startRange = new Composite();
startRange.addComponent(0, "prefix1_prefix2_",Composite.ComponentEquality.EQUAL);

Composite endRange = new Composite();
endRange.addComponent(0, "prefix1_prefix2_",Composite.ComponentEquality.GREATER_THAN_EQUAL);

query.setRange(startRange, endRange, false, Integer.MAX_VALUE);