如何在 HBase 过滤器中混合 MUST_PASS_ALL 和 MUST_PASS_ONE?

How do I mix MUST_PASS_ALL and MUST_PASS_ONE in HBase filters?

我有一个 HBase 扫描,其中有一个 ColumnPrefixFilter 和多个 FuzzyFilter,如下所示:

FilterList filterList = new FilterList();
filterList.addFilter(new FuzzyFilter(...));
filterList.addFilter(new FuzzyFilter(...));
filterList.addFilter(new ColumnPrefixFilter(...));
Scan s = new Scan();
s.setFilter(filterList);

有没有一种方法可以在 FuzzyFilter 上使用 MUST_PASS_ONE,然后在 ColumnPrefixFilter 上使用 MUST_PASS_ALL 并结合 FuzzyFilter 的集合小号?

所以我正在寻找这样的东西:

ColumnPrefixFilter 和 (FuzzyFilterFuzzyFilter)

我们可以实现两个不同的 FilterList 来实现这一点。参考下面的代码

    FilterList mainFilter = new FilterList(FilterList.Operator.MUST_PASS_ALL);
    FilterList subFilter = new FilterList(FilterList.Operator.MUST_PASS_ONE);

    subFilter.addFilter(new FuzzyRowFilter(null));
    subFilter.addFilter(new FuzzyRowFilter(null));

    mainFilter.addFilter(new ColumnPrefixFilter(Bytes.toBytes("d")));
    mainFilter.addFilter(subFilter);

您可以使用 MUST_PASS_ALL 运算符定义一个 mainFilter 并使用 MUST_PASS_ONE 定义一个 subFilter。现在将过滤条件添加到 subFilter 中,然后将此 subFilter 添加回 mainFilter。

FilterList本身就是一个Filter,所以把它们组合起来就可以了

FilterList fuzzy = new FilterList(MUST_PASS_ONE, fuzzy1, fuzzy2);
FilterList main = new FilterList(MUST_PASS_ALL, prefixFilter, fuzzy);
s.setFilter(main);