【发布时间】:2013-06-04 04:56:25
【问题描述】:
在基于复合列的过滤方面需要一些帮助。
由于某种原因,我无法对复合列的第二部分进行过滤 -
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)
上面给出了基于 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());
}
【问题讨论】: