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