13

有没有办法在扫描期间指定多个过滤器?例如 - 同时指定 aColumnFamilyFilterRowFilter?

Filter rowFilter =
                new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator(
                        rowFilterString));
        Scan s = new Scan();
        s.setFilter(rowFilter);

我还想添加一个ColumnFilters. 但它显然会覆盖最新的过滤器。

4

3 回答 3

24

您必须创建一个FilterList对象,然后添加您想要的所有过滤器,并将此FilterList对象设置为过滤器。您可以使用构造函数或使用addFilter()方法将过滤器添加到过滤器列表。

FilterList filterList = new FilterList();
filterList.addFilter(new RowFilter(...));
filterList.addFilter(new ColumnFilter(...));
Scan s = new Scan();
s.setFilter(filterList);
于 2013-08-26T11:48:15.690 回答
8

如果您要添加多个过滤器,请记住默认情况下 filterlist 使用

FilterList.Operator.MUST_PASS_ALL

这意味着必须通过所有过滤器(AND 条件)。利用

FilterList.Operator.MUST_PASS_ONE 

如果要对过滤器应用 OR 条件。

于 2014-12-10T13:24:06.093 回答
5

您可以使用 FilterList 对象添加过滤器列表,并可以使用 ArrayList 控制过滤器的顺序。每个FilterList 只接受一个运算符[OR, AND]。但是,可以通过将具有自己的运算符的多个过滤器列表实例添加到父过滤器列表来创建过滤器列表的层次结构。

例如:filters_1 & filters_2 是两个过滤器列表。

FilterList filterList1 = new FilterList(FilterList.Operator.MUST_PASS_ONE,filters_1);
FilterList filterList2 = new FilterList(FilterList.Operator.MUST_PASS_ALL,filters_2);


List<Filter> filterAggregate = new ArrayList<>();
filterAggregate.add(filterList1);
filterAggregate.add(filterList2);

FilterList filterList3 = new FilterList(FilterList.Operator.MUST_PASS_ALL,filterAggregate);
于 2017-03-14T18:43:19.990 回答