title: Hbase FilterList as MUST_PASS_ONE with two RowFilters returns everything
body: <p>I have a column family called odds_api with the number of rows with the rowkey: /bt=??/bm=??/mk=??/se=??:</p>
  
  <pre><code>/bt=1/bm=MN/mk=344/se=23394/odds_api
  /bt=1/bm=BY/mk=344/se=23394/odds_api
  /bt=1/bm=SN/mk=344/se=23394/odds_api
  /bt=1/bm=BB/mk=344/se=23394/odds_api
  /bt=1/bm=SF/mk=344/se=23394/odds_api
  /bt=1/bm=XY/mk=344/se=23394/odds_api
  </code></pre>
  
  <p>I want to filter based on a list of bm values aka filter based on bm=SF,BB,MN. </p>
  
  <p>To do this I created a filterList of MUST_PASS_ONE with 1 to many rowFilters (depending on how many values the user requests)</p>
  
  
  
  <pre><code>public ResultScanner scan(String id , List&lt;String&gt; bms) throws BigTableGetException {
      try{
          Table table = connection.getTable(TableName.valueOf(this.tableName));
          Scan scan = new Scan();
          scan.addFamily(Bytes.toBytes("odds_api"));
          FilterList mainFilterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);
  
          bms.stream()
                  .forEach(bm -&gt; {
                      mainFilterList.addFilter(new RowFilter(CompareOp.EQUAL, new RegexStringComparator("/bt="+id+"/bm="+bm+".*")));
  
                  });
          System.out.println("this is the filter list " + mainFilterList.toString());
  
          scan.setFilter(mainFilterList);
          return table.getScanner(scan);
      }catch (IOException ex){
          throw new BigTableGetException("Failed to get rows in BigTable", ex);
      }
  }
  </code></pre>
  
  <p>(I know -- pointless stream for a forEach!)</p>
  
  <p>This works fine when only one bm is specified, print statement:</p>
  
  <pre><code>this is the filter list FilterList OR (1/1): [RowFilter (EQUAL, /bt=1/bm=B4.*)]
  </code></pre>
  
  <p>however if more than one is specified then it returns everything, print statement: </p>
  
  <pre><code>this is the filter list FilterList OR (2/2): [RowFilter (EQUAL, /bt=1/bm=B4.*), RowFilter (EQUAL, /bt=1/bm=PP.*)]
  </code></pre>
  
  <p>In fact, if I enter two or more 'incorrect' bm values it still returns everything!</p>
  
  <p>I have read: <a href="https://www.oreilly.com/library/view/hbase-the-definitive/9781449314682/ch04.html" rel="nofollow noreferrer">https://www.oreilly.com/library/view/hbase-the-definitive/9781449314682/ch04.html</a> </p>
  
  <p>I have also tried to move the bt=? filter out to a separate MUST_PASS_ALL filter and then have another list of row filters for bm=?</p>
  
  <pre><code>this is the filter list FilterList AND (2/2): [FilterList AND (1/1): [RowFilter (EQUAL, .*bt=1)], FilterList OR (2/2): [RowFilter (EQUAL, .*/bm=B4.*), RowFilter (EQUAL, .*/bm=PP.*)]]
  </code></pre>
  
  <p>Same problems. </p>
  
  <p>I must be missing something obvious, any help would be greatly appreciated.  </p>
  
  <p>hbase versions: </p>
  
  
  
  <pre><code>&lt;dependency&gt;
      &lt;groupId&gt;com.google.cloud.bigtable&lt;/groupId&gt;
      &lt;artifactId&gt;bigtable-hbase-1.x&lt;/artifactId&gt;
      &lt;version&gt;1.4.0&lt;/version&gt;
  &lt;/dependency&gt;
  
  &lt;dependency&gt;
      &lt;groupId&gt;com.google.cloud.bigtable&lt;/groupId&gt;
      &lt;artifactId&gt;bigtable-hbase-1.x-hadoop&lt;/artifactId&gt;
      &lt;version&gt;1.4.0&lt;/version&gt;
  &lt;/dependency&gt;
  </code></pre>