Hbase没有给出预期的Multiple FilterList.Operator.MUST_PASS_ALL和FilterList.Operator.MUST_PASS_ONE的输出

时间:2018-08-03 13:43:33

标签: java hbase

我在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问题:

  1. Specify multiple filters in hbase
  2. How do I mix MUST_PASS_ALL and MUST_PASS_ONE in HBase filters?

任何人都有答案或工作代码或链接吗?


编辑:因此,当我将filters.add(new PrefixFilter(Bytes.toBytes(s)))更改为filters.add(new RowFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator(s)))时,代码开始正常工作。我不知道为什么。

0 个答案:

没有答案