Use Lucene to index and search on commit-id

Use a PrefixQuery to match partial or full commit-ids.

Change-Id: I0a82873c3b802a5abbd96467dff44007609248ba
This commit is contained in:
Nasser Grainawi
2013-06-25 15:06:44 -06:00
parent 13b2073043
commit 6ef53023df
4 changed files with 38 additions and 7 deletions

View File

@@ -61,6 +61,7 @@ import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.NumericRangeQuery;
import org.apache.lucene.search.PrefixQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.RegexpQuery;
import org.apache.lucene.search.ScoreDoc;
@@ -258,6 +259,8 @@ public class LuceneChangeIndex implements ChangeIndex, LifecycleListener {
return timestampQuery(p);
} else if (p.getType() == FieldType.EXACT) {
return exactQuery(p);
} else if (p.getType() == FieldType.PREFIX) {
return prefixQuery(p);
} else {
throw badFieldType(p.getType());
}
@@ -328,6 +331,10 @@ public class LuceneChangeIndex implements ChangeIndex, LifecycleListener {
return new RegexpQuery(new Term(p.getOperator(), re));
}
private Query prefixQuery(IndexPredicate<ChangeData> p) {
return new PrefixQuery(new Term(p.getOperator(), p.getValue()));
}
private class QuerySource implements ChangeDataSource {
// TODO(dborowitz): Push limit down from predicate tree.
private static final int LIMIT = 1000;
@@ -439,7 +446,8 @@ public class LuceneChangeIndex implements ChangeIndex, LifecycleListener {
for (Object v : values) {
doc.add(new IntField(name, toIndexTime((Timestamp) v), store));
}
} else if (f.getType() == FieldType.EXACT) {
} else if (f.getType() == FieldType.EXACT
|| f.getType() == FieldType.PREFIX) {
for (Object value : values) {
doc.add(new StringField(name, (String) value, store));
}