package proj.zoie.perf.tools;
import java.io.File;
import java.io.IOException;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.Version;
import proj.zoie.api.DefaultDirectoryManager;
import proj.zoie.api.DirectoryManager;
public class IndexReplicator {
/**
* @param args
*/
public static void main(String[] args) throws IOException {
File srcIndex = new File(args[0]);
File targetIndex = new File(args[1]);
int numReplicas = Integer.parseInt(args[2]);
System.out.println("source index: " + srcIndex.getAbsolutePath());
System.out.println("target index: " + targetIndex.getAbsolutePath());
System.out.println("num replications: " + numReplicas);
IndexReader reader = null;
DirectoryManager srcDirMgr = new DefaultDirectoryManager(srcIndex);
try {
Directory dir = srcDirMgr.getDirectory();
reader = DirectoryReader.open(dir);
System.out.println("source index, numdocs: " + reader.numDocs());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
reader.close();
}
reader = null;
}
DirectoryManager targetDirMgr = new DefaultDirectoryManager(targetIndex);
Directory targetDir = targetDirMgr.getDirectory(true);
IndexWriter writer = null;
try {
IndexWriterConfig idxWriterConf = new IndexWriterConfig(Version.LUCENE_43,
new StandardAnalyzer(Version.LUCENE_43));
writer = new IndexWriter(targetDir, idxWriterConf);
for (int i = 0; i < numReplicas; ++i) {
System.out.println("replicating " + (i + 1) + " time(s)");
writer.addIndexes(new Directory[] { srcDirMgr.getDirectory() });
}
System.out.println("optimizing....");
writer.forceMerge(1);
System.out.println("done optimizing....");
} finally {
if (writer != null) {
writer.close();
}
}
try {
reader = DirectoryReader.open(targetDir);
System.out.println("target index, numdocs: " + reader.numDocs());
} finally {
if (reader != null) {
reader.close();
}
}
}
}