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. */