我在Java中使用Hbase。
我的病情很像(((a OR b OR c)OR(d AND e)))。
为此,我的编码就像:
List<Filter> filters = new ArrayList<Filter>();
for(String s: setofString) {
filters.add(new PrefixFilter(Bytes.toBytes(s)));
}
FilterList fls1 = new FilterList(FilterList.Operator.MUST_PASS_ONE, filters);
Filter filter1 = new PrefixFilter(Bytes.toBytes(d));
Filter filter2 = new SingleColumnValueFilter(Bytes.toBytes("columnfamily"),
Bytes.toBytes("column"), CompareFilter.CompareOp.GREATER,
new BinaryComparator(Bytes.toBytes(e)));
FilterList fls2 = new FilterList(FilterList.Operator.MUST_PASS_ALL, filter1, filter2);
FilterList fls = new FilterList(FilterList.Operator.MUST_PASS_ONE);
fls.addFilter(fls1);
fls.addFilter(fls2);
Scan s = new Scan();
s.setFilter(fls);
现在,当我使用s.setFilter(fls1)
时,它会按预期提供输出。
同样,当我使用s.setFilter(fls2)
时,它也会提供预期的输出。
但是使用s.setFilter(fls)
并不能获得预期的输出。但是给出((a OR b OR c)OR(d))的输出,则完全忽略条件中的“ AND e”。
我也研究了stackoverflow问题:
任何人都有答案或工作代码或链接吗?
编辑:因此,当我将filters.add(new PrefixFilter(Bytes.toBytes(s)))
更改为filters.add(new RowFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator(s)))
时,代码开始正常工作。我不知道为什么。