Return cardinality from predicate when available
Return cardinality from predicate when it implements HasCardinality.
Release-Notes: skip
Change-Id: I5a578f9a80c5e44c1b1fd318c5c97fec4d5a58b0
diff --git a/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java b/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
index 3b300cf..33bab63 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
@@ -43,6 +43,7 @@
import com.google.gerrit.index.Schema;
import com.google.gerrit.index.query.DataSource;
import com.google.gerrit.index.query.FieldBundle;
+import com.google.gerrit.index.query.HasCardinality;
import com.google.gerrit.index.query.ListResultSet;
import com.google.gerrit.index.query.Predicate;
import com.google.gerrit.index.query.QueryParseException;
@@ -362,11 +363,13 @@
protected class ElasticQuerySource implements DataSource<V> {
private final QueryOptions opts;
+ private final Predicate<V> predicate;
private final String search;
ElasticQuerySource(Predicate<V> p, QueryOptions opts, JsonArray sortArray)
throws QueryParseException {
this.opts = opts;
+ this.predicate = p;
QueryBuilder qb = queryBuilder.toQueryBuilder(p);
SearchSourceBuilder searchSource =
new SearchSourceBuilder(client.adapter())
@@ -382,6 +385,9 @@
@Override
public int getCardinality() {
+ if (predicate instanceof HasCardinality) {
+ return ((HasCardinality) predicate).getCardinality();
+ }
return 10;
}