Add search fields for # of changed lines.
Based off https://gerrit-review.googlesource.com/#/c/52190, but implementing the final suggestion of indexing raw delta counts and allowing arbitrary range queries off of those. Also upgrade Lucene to 4.8.1 as this was released since the last schema change (which was on 4.7.0). Change-Id: Ia8a677e71e133f68eced4c5394df1d23efe7f12a
This commit is contained in:
@@ -127,6 +127,8 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||
Version lucene44 = Version.LUCENE_44;
|
||||
@SuppressWarnings("deprecation")
|
||||
Version lucene46 = Version.LUCENE_46;
|
||||
@SuppressWarnings("deprecation")
|
||||
Version lucene47 = Version.LUCENE_47;
|
||||
for (Map.Entry<Integer, Schema<ChangeData>> e
|
||||
: ChangeSchemas.ALL.entrySet()) {
|
||||
if (e.getKey() <= 3) {
|
||||
@@ -135,8 +137,10 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||
versions.put(e.getValue(), lucene44);
|
||||
} else if (e.getKey() <= 8) {
|
||||
versions.put(e.getValue(), lucene46);
|
||||
} else if (e.getKey() <= 10) {
|
||||
versions.put(e.getValue(), lucene47);
|
||||
} else {
|
||||
versions.put(e.getValue(), Version.LUCENE_47);
|
||||
versions.put(e.getValue(), Version.LUCENE_48);
|
||||
}
|
||||
}
|
||||
LUCENE_VERSIONS = versions.build();
|
||||
@@ -497,7 +501,7 @@ public class LuceneChangeIndex implements ChangeIndex {
|
||||
FieldType<?> type = values.getField().getType();
|
||||
Store store = store(values.getField());
|
||||
|
||||
if (type == FieldType.INTEGER) {
|
||||
if (type == FieldType.INTEGER || type == FieldType.INTEGER_RANGE) {
|
||||
for (Object value : values.getValues()) {
|
||||
doc.add(new IntField(name, (Integer) value, store));
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.google.common.collect.Lists;
|
||||
import com.google.gerrit.server.index.ChangeField;
|
||||
import com.google.gerrit.server.index.FieldType;
|
||||
import com.google.gerrit.server.index.IndexPredicate;
|
||||
import com.google.gerrit.server.index.IntegerRangePredicate;
|
||||
import com.google.gerrit.server.index.RegexPredicate;
|
||||
import com.google.gerrit.server.index.Schema;
|
||||
import com.google.gerrit.server.index.TimestampRangePredicate;
|
||||
@@ -135,6 +136,8 @@ public class QueryBuilder {
|
||||
throws QueryParseException {
|
||||
if (p.getType() == FieldType.INTEGER) {
|
||||
return intQuery(p);
|
||||
} else if (p.getType() == FieldType.INTEGER_RANGE) {
|
||||
return intRangeQuery(p);
|
||||
} else if (p.getType() == FieldType.TIMESTAMP) {
|
||||
return timestampQuery(p);
|
||||
} else if (p.getType() == FieldType.EXACT) {
|
||||
@@ -169,6 +172,28 @@ public class QueryBuilder {
|
||||
return new TermQuery(intTerm(p.getField().getName(), value));
|
||||
}
|
||||
|
||||
private Query intRangeQuery(IndexPredicate<ChangeData> p)
|
||||
throws QueryParseException {
|
||||
if (p instanceof IntegerRangePredicate) {
|
||||
IntegerRangePredicate<ChangeData> r =
|
||||
(IntegerRangePredicate<ChangeData>) p;
|
||||
int minimum = r.getMinimumValue();
|
||||
int maximum = r.getMaximumValue();
|
||||
if (minimum == maximum) {
|
||||
// Just fall back to a standard integer query.
|
||||
return new TermQuery(intTerm(p.getField().getName(), minimum));
|
||||
} else {
|
||||
return NumericRangeQuery.newIntRange(
|
||||
r.getField().getName(),
|
||||
minimum,
|
||||
maximum,
|
||||
true,
|
||||
true);
|
||||
}
|
||||
}
|
||||
throw new QueryParseException("not an integer range: " + p);
|
||||
}
|
||||
|
||||
private Query sortKeyQuery(SortKeyPredicate p) {
|
||||
long min = p.getMinValue(schema);
|
||||
long max = p.getMaxValue(schema);
|
||||
|
||||
Reference in New Issue
Block a user