hbase fuzzyrowfilter不工作

daupos2t  于 2021-06-10  发布在  Hbase
关注(0)|答案(2)|浏览(427)

我有一个由20个字符组成的行键,如下所示:
xaa
我想用电脑扫描 FuzzyRowFilter 在2到6位的aa值上。但是 AA 不是固定值。

li9yvcax

li9yvcax1#

如果没有aaaa,可以这样做:

FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);
String[] matches=new String[]{"AAAA","BBBB"};
    for (String match:matches) {
        byte[] rk = Bytes.toBytesBinary("??" + match + "??????????????");
        byte[] fuzzyVal = new byte[]{1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
        List<Pair<byte[], byte[]>> pairs = new ArrayList<>();
        pairs.add(new Pair<>(rk, fuzzyVal));
        filterList.addFilter(new FuzzyRowFilter(pairs));
    }
Scan scan=new Scan();
    scan.setFilter(filterList);

这将基于列表中的所有FuzzyFilter进行筛选,并基于filterlist.operator进行匹配。必须通过一个。根据您的要求,进行相应的修改。

o7jaxewo

o7jaxewo2#

抱歉,但是使用,

FilterList filterList = new FilterList(/*FilterList.Operator.MUST_PASS_ONE*/);
    String[] matches=new String[]{"1609","1610"};
        for (String match:matches) {
            byte[] rk = Bytes.toBytesBinary("??" + match + "??????????????");
            byte[] fuzzyVal = new byte[]{1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
            List<Pair<byte[], byte[]>> pairs = new ArrayList<>();
            pairs.add(new Pair<>(rk, fuzzyVal));
            filterList.addFilter(new FuzzyRowFilter(pairs));
        }
    Scan scan_fuzzy=new Scan();
    scan_fuzzy.setFilter(filterList);

    ResultScanner rs_fuzzy = table.getScanner(scan);

    for( Result result : rs_fuzzy) {
        System.out.println(result);
        System.out.println("Value: "  + Bytes.toString(result.getValue(FAMILY,COLUMN)));
    }

我的结果不仅仅包含与rowkey:02160901222720647002对应的行
但是我的表的所有行(和rowkey)

相关问题