在cassandra复合列上使用hector进行切片查询

时间:2013-05-15 20:52:41

标签: cassandra slice

需要一些基于Composite列的过滤帮助。

由于某种原因,我无法过滤复合色谱柱的第二部分 -

create column family xxx with comparator= 'CompositeType(TimeUUIDType, UTF8Type, UTF8Type)' and default_validation_class = 'UTF8Type';

一行数据 -

primaryKey - uuid1:A:123 | uuid2:A:123 | uuid3:B:234 | uuid4:C:555

Composite startComposite = new Composite();
startcomposite.addComponent(0,uuidStart,EQUAL)
Composite endComposite = new Composite();
endComposite.addComponent(0,uuidEnd,EQUAL)

Above基于uuidStart和uuidEnd值

给出正确的结果

e.g。 uuid1:A:123 | uuid2:A:123 | uuid3:B:234

现在,如果我只希望第二部分的列为“A” -

Composite startComposite = new Composite();
startcomposite.addComponent(0,uuidStart,EQUAL)
startcomposite.addComponent(1,"A",EQUAL)
Composite endComposite = new Composite();
endComposite.addComponent(0,uuidEnd,EQUAL)
endComposite.addComponent(1,"A",EQUAL) OR  endComposite.addComponent(1,"A",GREATER_THAN_EQUAL)

它给了我 - uuid1:A:123 | uuid2:A:123 | uuid3:B:234

我在期待 - uuid1:A:123 | UUID2:A:123

这里的任何输入都是错的......

我正在使用的代码 -

    SliceQuery<String, Composite, String> sliceQuery = HFactory
            .createSliceQuery(keyspace, ss, cs, ss);
    sliceQuery.setColumnFamily("xxx");
    sliceQuery.setKey(primaryKey);


ColumnSliceIterator<String, Composite, String> csIterator = new ColumnSliceIterator<String, Composite, String>(sliceQuery, startcomposite, endComposite, false);

    while (csIterator.hasNext()) {
        HColumn<Composite, String> next = csIterator.next();
        System.out.println(next.getName());
        System.out.println(next.getValue());
    }

2 个答案:

答案 0 :(得分:0)

因为您使用了GREATER_THAN_EQUAL,所以它返回结果并不奇怪。

答案 1 :(得分:0)

需要为复合切片的所有部分赋予相同的值。所以改变了顺序。