2013-04-09 199 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);