This looks like a Bug in v3.3.0.
The code below works in 3.0.1 without calling the writer.commit() before
IndexReader.open(directory).
In v3.3.0 when the index does not yet exist I need to add the
writer.commit() and I believe that creates the segments. If I don't add the
writer.commit() then I get the IndexNotFoundException: no segments* file
found exception below.
IndexWriterConfig config = new
IndexWriterConfig(Version.LUCENE_33, analyzer);
config.setOpenMode(OpenMode.CREATE_OR_APPEND);
config.setIndexDeletionPolicy(commitDeletionPolicy);
IndexWriter writer = new IndexWriter(directory, config);
// -----------------
// Need to add this w.commit() when the index is does not exist
writer.commit();
// -----------------
// without the commit above this fails with
a IndexNotFoundException when the index does not exist
IndexReader reader = IndexReader.open(directory);
The exception when writer.commit() is not there and the index does not exist
is:
Caused by: org.apache.lucene.index.IndexNotFoundException: no segments* file
found in
org.apache.lucene.store.SimpleFSDirectory@C:\dev\workspace-sts\uoa-tmp-copydb\lucene\dst\model.indexdefn.OrgUnitIndexDefn
lockFactory=org.apache.lucene.store.NativeFSLockFactory@3bc257: files:
[write.lock]
at
org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:708)
at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:75)
at org.apache.lucene.index.IndexReader.open(IndexReader.java:428)
at org.apache.lucene.index.IndexReader.open(IndexReader.java:274)
The workaround is to add the writer.commit() and that seems pretty
reasonable to me.
Thanks, Rob.