public virtual void TestAddIndexes()
{
Directory dir1 = NewDirectory();
IndexWriterConfig conf = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random()));
IndexWriter writer = new IndexWriter(dir1, conf);
int numDocs = AtLeast(50);
int numTerms = TestUtil.NextInt(Random(), 1, numDocs / 5);
HashSet<string> randomTerms = new HashSet<string>();
while (randomTerms.Count < numTerms)
{
randomTerms.Add(TestUtil.RandomSimpleString(Random()));
}
// create first index
for (int i = 0; i < numDocs; i++)
{
Document doc = new Document();
doc.Add(new StringField("id", RandomInts.RandomFrom(Random(), randomTerms), Store.NO));
doc.Add(new BinaryDocValuesField("bdv", ToBytes(4L)));
doc.Add(new BinaryDocValuesField("control", ToBytes(8L)));
writer.AddDocument(doc);
}
if (Random().NextBoolean())
{
writer.Commit();
}
// update some docs to a random value
long value = Random().Next();
Term term = new Term("id", RandomInts.RandomFrom(Random(), randomTerms));
writer.UpdateBinaryDocValue(term, "bdv", ToBytes(value));
writer.UpdateBinaryDocValue(term, "control", ToBytes(value * 2));
writer.Dispose();
Directory dir2 = NewDirectory();
conf = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random()));
writer = new IndexWriter(dir2, conf);
if (Random().NextBoolean())
{
writer.AddIndexes(dir1);
}
else
{
DirectoryReader reader = DirectoryReader.Open(dir1);
writer.AddIndexes(reader);
reader.Dispose();
}
writer.Dispose();
DirectoryReader reader_ = DirectoryReader.Open(dir2);
BytesRef scratch = new BytesRef();
foreach (AtomicReaderContext context in reader_.Leaves)
{
AtomicReader r = context.AtomicReader;
BinaryDocValues bdv = r.GetBinaryDocValues("bdv");
BinaryDocValues control = r.GetBinaryDocValues("control");
for (int i = 0; i < r.MaxDoc; i++)
{
Assert.AreEqual(GetValue(bdv, i, scratch) * 2, GetValue(control, i, scratch));
}
}
reader_.Dispose();
IOUtils.Close(dir1, dir2);
}