2013-04-09 236 views
0

我是cassandra和hector的新手。现在我试图检索一些我在cassandra中存储的数据。有很多列,其中一些有一个前缀。与Queryslice.setrange混淆

column1 column2 column3 prefix1_prefix2_column3 prefix1_prefix2_column4 ....依此类推。

现在我想所有prefix1_prefix2_

列然而,我得到了比我更想要的,其他的一些列也returend。

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()); 


    } 

这样,所有的,我得到了更多的列比我预期的...任何人能帮助我吗? 非常感谢你

回答

0

不要Concat的字符串,而生成密钥,尝试将列名拆分为复合键,如“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);