1. Start a NEW IndexWriterBuilder on an empty folder,
add some documents to the index
2. Call commit
3. When the segments_1 file with 0 byte was created, kill the JVM
We will end with a corrupted index with an empty segments_1.
We only have issue with the first commit crash.
Also, if you tried to open an IndexSearcher on a new index. And the first commit on the index was not finished yet. Then you will see exception like:
org.apache.lucene.index.IndexNotFoundException: no segments* file found in org.apache.lucene.store.MMapDirectory@C:\tmp\testdir lockFactory=org.apache.lucene.store.NativeFSLockFactory@6ee00df: files: [write.lock, _0.fdt, _0.fdx]
So when a new index was created, we should first create an empty index. We should not wait for the commit/close call to create the segment file.
If we had an empty index there. It won't leave a corrupted index when there were a power issue on the first commit.
And a concurrent IndexSearcher can access to the index(No match is better than exception).
|Status||Open [ 1 ]||Resolved [ 5 ]|
|Assignee||Michael McCandless [ mikemccand ]|
|Fix Version/s||5.0 [ 12321663 ]|
|Fix Version/s||4.3 [ 12324143 ]|
|Resolution||Fixed [ 1 ]|
|Status||Resolved [ 5 ]||Closed [ 6 ]|