I see it stripped my attachment off. Here's the code:
import junit.framework.TestCase;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
public class AddIndexesTest extends TestCase {
public AddIndexesTest(String name) {
super(name);
}
public void testAddIndexes() throws Exception {
{
Directory dir1 =
FSDirectory.getDirectory("/dev/searchdata/addIndexesTest1", true);
IndexWriter writer1 = new IndexWriter(dir1, new
StandardAnalyzer(), true);
Document doc1 = new Document();
doc1.add(Field.UnIndexed("ID", "id1"));
doc1.add(Field.UnStored("f", "some words"));
writer1.addDocument(doc1);
writer1.close();
dir1.close();
IndexSearcher searcher = new
IndexSearcher("/dev/searchdata/addIndexesTest1");
Hits hits = searcher.search(new TermQuery(new Term("f",
"words")));
assertEquals(1, hits.length());
searcher.close();
}
{
Directory dir2 =
FSDirectory.getDirectory("/dev/searchdata/addIndexesTest2", true);
IndexWriter writer2 = new IndexWriter(dir2, new
StandardAnalyzer(), true);
Document doc1 = new Document();
doc1.add(Field.UnIndexed("ID", "id2"));
doc1.add(Field.UnStored("f", "some other words"));
writer2.addDocument(doc1);
writer2.close();
dir2.close();
IndexSearcher searcher = new
IndexSearcher("/dev/searchdata/addIndexesTest2");
Hits hits = searcher.search(new TermQuery(new Term("f",
"words")));
assertEquals(1, hits.length());
searcher.close();
}
Directory dir =
FSDirectory.getDirectory("/dev/searchdata/addIndexesTest1", false);
IndexWriter writer = new IndexWriter(dir, new
StandardAnalyzer(), false);
writer.addIndexes(new Directory[] {
FSDirectory.getDirectory("/dev/searchdata/addIndexesTest2", false) });
writer.close();
dir.close();
IndexSearcher searcher = new
IndexSearcher("/dev/searchdata/addIndexesTest1");
Hits hits = searcher.search(new TermQuery(new Term("f",
"words")));
assertEquals(2, hits.length());
searcher.close();
}
}
-----Original Message-----
From: Kevin Oliver
Sent: Monday, December 12, 2005 2:53 PM
To: [email protected]
Subject: RE: IndexWriter.addIndexes(Directory[] dirs)
Volodymyr, I tried this patch out, and unfortunately it doesn't appear
to work for me. Is there something I missed?
I'll try attaching my Junit test case that works when the code is
unpatched, but fails on the final assertion expecting 2 hits (on line
63) when I used the patched IndexWriter.java.
Thanks,
Kevin
-----Original Message-----
From: Volodymyr Bychkoviak [mailto:[EMAIL PROTECTED]
Sent: Monday, December 12, 2005 5:51 AM
To: [email protected]
Subject: IndexWriter.addIndexes(Directory[] dirs)
IndexWriter in addIndexes(Directory[] dirs) method optimizes index
before and after operation.
Some notes about this:
1). Adding sub indexes to large index can take long because of double
optimization.
2). This breaks IndexWriter.maxMergeDocs logic, because optimize will
merge data into single segment index.
I suggest add new method with boolean parameter to optionally specify
whether index should be optimized.
There is similar method addIndexes(IndexReader[] readers) in IndexWriter
that takes array of IndexReaders but I don't know how it can be modified
to provide same optional functionality
Patch attached here to discuss it first
(should I post it directly to jira?)
--
regards,
Volodymyr Bychkoviak