Use bool 'filter' queries instead of 'match'

We don't use the scoring done by 'match' so it's recommended by ES to
use 'filter' when you want a 'yes/no' answer.

Change-Id: I4a5a66f4fcd0e536088ac84b280ec82ceab5a10e
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryBuilder.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryBuilder.java
index 40ac603..cde5560 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryBuilder.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryBuilder.java
@@ -52,7 +52,7 @@
   private <T> BoolQueryBuilder and(Predicate<T> p) throws QueryParseException {
     BoolQueryBuilder b = QueryBuilders.boolQuery();
     for (Predicate<T> c : p.getChildren()) {
-      b.must(toQueryBuilder(c));
+      b.filter(toQueryBuilder(c));
     }
     return b;
   }
@@ -73,7 +73,7 @@
 
     // Lucene does not support negation, start with all and subtract.
     BoolQueryBuilder q = QueryBuilders.boolQuery();
-    q.must(QueryBuilders.matchAllQuery());
+    q.filter(QueryBuilders.matchAllQuery());
     q.mustNot(toQueryBuilder(n));
     return q;
   }
diff --git a/src/main/java/com/google/gerrit/elasticsearch/builders/BoolQueryBuilder.java b/src/main/java/com/google/gerrit/elasticsearch/builders/BoolQueryBuilder.java
index a204919..741aec7 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/builders/BoolQueryBuilder.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/builders/BoolQueryBuilder.java
@@ -42,6 +42,15 @@
   }
 
   /**
+   * Adds a query that <b>must</b> appear in the matching documents and will not contribute to
+   * scoring.
+   */
+  public BoolQueryBuilder filter(QueryBuilder queryBuilder) {
+    filterClauses.add(queryBuilder);
+    return this;
+  }
+
+  /**
    * Adds a query that <b>must not</b> appear in the matching documents and will not contribute to
    * scoring.
    */