0

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

由于某种原因,我无法在复合列的第二部分进行过滤-

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

一行数据——

主键 - 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)

以上根据 uuidStart 和 uuidEnd 值给出了正确的结果

例如 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());
    }
4

2 回答 2

0

毫不奇怪,自从您使用GREATER_THAN_EQUAL.

于 2013-05-16T05:50:09.370 回答
0

需要对要切片的复合材料的所有部分具有相同的值。所以改变了顺序。

于 2013-06-03T20:56:25.720 回答