import org.apache.solr.client.solrj.SolrClient; //导入方法依赖的package包/类
public static void main(String[] args) throws CorruptIndexException, IOException, SolrServerException {
if (args.length < 3) {
System.err.println("Usage: java -Dfile.encoding=UTF8 -Dclient.encoding.override=UTF-8 -Xmx256m -Xms256m -server " + IndexLoader.class.getName()
+ " [indexField2,acField2 ... ]");
System.exit(0);
}
Map fieldMap = getFieldMapping(args, 2);
DirectoryReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(args[0])));
int docs = reader.maxDoc();
SolrClient solr = new ConcurrentUpdateSolrClient.Builder(args[1]).withQueueSize(10000).withThreadCount(2).build();
Set batch = new HashSet(1000);
Bits liveDocs = MultiFields.getLiveDocs(reader);
// go through all docs in the index
for (int i = 0; i < docs; i++) {
// process doc only if not deleted
if (liveDocs == null || liveDocs.get(i)) {
// loop through all fields to be looked at
SolrInputDocument doc = new SolrInputDocument();
Iterator iter = fieldMap.keySet().iterator();
boolean phraseFieldEmpty = false;
while (iter.hasNext()) {
String indexField = iter.next();
String acField = fieldMap.get(indexField);
IndexableField field = reader.document(i).getField(indexField);
String value = field != null ? reader.document(i).getField(indexField).stringValue() : null;
if (field != null && value != null && !value.isEmpty()) {
doc.addField(acField, value);
} else {
// not very relevant piece of info
// System.err.println("Field is null or empty, skipping: " + indexField);
if (acField.equalsIgnoreCase("phrase")) {
System.err.println("Since AC phrase field would be null, this doc will not be created: " + reader.document(i));
phraseFieldEmpty = true;
break;
}
}
}
if (!phraseFieldEmpty) {
solr.add(doc);
if (docs % 1000 == 0) {
System.out.println("Docs: " + docs);
}
}
}
}
if (!batch.isEmpty())
solr.add(batch);
reader.close();
System.out.println("Optimizing...");
solr.optimize();
solr.close();
}