需要一些基于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());
}
答案 0 :(得分:0)
因为您使用了GREATER_THAN_EQUAL
,所以它返回结果并不奇怪。
答案 1 :(得分:0)
需要为复合切片的所有部分赋予相同的值。所以改变了顺序。