我有一个由20个字符组成的行键,如下所示:xaa我想用电脑扫描 FuzzyRowFilter 在2到6位的aa值上。但是 AA 不是固定值。
FuzzyRowFilter
AA
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进行匹配。必须通过一个。根据您的要求,进行相应的修改。
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)
2条答案
按热度按时间li9yvcax1#
如果没有aaaa,可以这样做:
这将基于列表中的所有FuzzyFilter进行筛选,并基于filterlist.operator进行匹配。必须通过一个。根据您的要求,进行相应的修改。
o7jaxewo2#
抱歉,但是使用,
我的结果不仅仅包含与rowkey:02160901222720647002对应的行
但是我的表的所有行(和rowkey)