> > P.S. At one point I tried doing an in-memory index using the 
> > RAMDirectory
> > and then merging it with an on-disk index and it didn't work.  The
> > RAMDirectory never flushed to disk... leaving me with an 
> > empty index.  I
> > think this is because of a bug in the mechanism that is 
> > supposed to copy the
> > segments during the merge, but I didn't follow up on this.
> 
> That should work, it should be faster and would use a lot 
> less memory than
> the approach you describe above.  Can you please submit a 
> simple test case
> illustrating the failure?  Something self-contained would be best.

Ok.  This will fail:

import java.io.*;
import org.apache.lucene.index.*;
import org.apache.lucene.analysis.*;
import org.apache.lucene.document.*;
import org.apache.lucene.store.*;

public class LuceneRAMDirectoryTest
{
    public static void main(String args[])
    {
        try
        {
            // create index in RAM
            RAMDirectory ramDirectory = new RAMDirectory();
            Analyzer analyzer = new SimpleAnalyzer();
            IndexWriter ramWriter = new IndexWriter(ramDirectory, analyzer,
true);
            try
            {
                for (int i = 0; i < 100; i++)
                {
                    Document doc = new Document();
                    doc.add(Field.Keyword("field1", "" + i));
                    ramWriter.addDocument(doc);
                }
            }
            finally
            {
                ramWriter.close();
            }
            
            // then merge into file
            File file = new File("index");
            boolean missing = !file.exists();
            if (missing) file.mkdir();
            IndexWriter fileWriter = new IndexWriter(file, analyzer, true);
            try
            {
                fileWriter.addIndexes(new Directory[]
                { ramDirectory });
            }
            finally
            {
                fileWriter.close();
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

Reply via email to