0

我是卡桑德拉和赫克托的新手。现在我正在尝试检索我存储在 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());


    }

所以,就这么多,我得到的专栏比我预期的要多……任何人都可以帮助我吗?非常感谢

4

1 回答 1

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);
于 2013-06-21T13:00:07.433 回答