Implement Account index for ElasticSearch

Initial implementation of the account index for ElasticSearch.

TODO: Define schema mappings when Gerrit starts up
TODO: Add support for online reindex

Change-Id: I21034daa71c36a1e462e3107b0c9a7ba6392f379
Signed-off-by: Dariusz Luksza <dluksza@collab.net>
Signed-off-by: David Pursehouse <dpursehouse@collab.net>
This commit is contained in:
Dariusz Luksza
2016-09-22 14:44:40 +02:00
committed by David Pursehouse
parent 1d71d309a4
commit 4053361f16
8 changed files with 337 additions and 19 deletions

View File

@@ -16,13 +16,12 @@ package com.google.gerrit.lucene;
import static com.google.gerrit.server.index.account.AccountField.ID;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.server.account.AccountCache;
import com.google.gerrit.server.account.AccountState;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.config.SitePaths;
import com.google.gerrit.server.index.IndexUtils;
import com.google.gerrit.server.index.QueryOptions;
import com.google.gerrit.server.index.Schema;
import com.google.gerrit.server.index.account.AccountIndex;
@@ -56,7 +55,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutionException;
public class LuceneAccountIndex
@@ -164,7 +162,7 @@ public class LuceneAccountIndex
List<AccountState> result = new ArrayList<>(docs.scoreDocs.length);
for (int i = opts.start(); i < docs.scoreDocs.length; i++) {
ScoreDoc sd = docs.scoreDocs[i];
Document doc = searcher.doc(sd.doc, fields(opts));
Document doc = searcher.doc(sd.doc, IndexUtils.accountFields(opts));
result.add(toAccountState(doc));
}
final List<AccountState> r = Collections.unmodifiableList(result);
@@ -198,13 +196,6 @@ public class LuceneAccountIndex
}
}
private Set<String> fields(QueryOptions opts) {
Set<String> fs = opts.fields();
return fs.contains(ID.getName())
? fs
: Sets.union(fs, ImmutableSet.of(ID.getName()));
}
private AccountState toAccountState(Document doc) {
Account.Id id =
new Account.Id(doc.getField(ID.getName()).numericValue().intValue());