Apache Lucene IndexFormatTooOldException

Pat*_*ick 5 java lucene

我正在使用Apache Lucene 5.0.0,我遇到的问题是,经过一段时间/某些"事务"后,索引似乎已损坏,我得到以下异常:

org.apache.lucene.index.IndexFormatTooOldException: Format version is not supported (resource BufferedChecksumIndexInput(NIOFSIndexInput(path="/opt/xyz/index/1/index/segments_5b"))): -911482135 (needs to be between 1071082519 and 1071082519). This version of Lucene only supports indexes created with release 4.0 and later.
    at org.apache.lucene.index.SegmentInfos.readCommit(SegmentInfos.java:288) ~[lucene-core-5.0.0.jar:5.0.0 1659987 - anshumgupta - 2015-02-15 12:20:03]
    at org.apache.lucene.index.StandardDirectoryReader$1.doBody(StandardDirectoryReader.java:53) ~[lucene-core-5.0.0.jar:5.0.0 1659987 - anshumgupta - 2015-02-15 12:20:03]
    at org.apache.lucene.index.StandardDirectoryReader$1.doBody(StandardDirectoryReader.java:50) ~[lucene-core-5.0.0.jar:5.0.0 1659987 - anshumgupta - 2015-02-15 12:20:03]
    at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:642) ~[lucene-core-5.0.0.jar:5.0.0 1659987 - anshumgupta - 2015-02-15 12:20:03]
    at org.apache.lucene.index.StandardDirectoryReader.open(StandardDirectoryReader.java:50) ~[lucene-core-5.0.0.jar:5.0.0 1659987 - anshumgupta - 2015-02-15 12:20:03]
    at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:63) ~[lucene-core-5.0.0.jar:5.0.0 1659987 - anshumgupta - 2015-02-15 12:20:03]
Run Code Online (Sandbox Code Playgroud)

这里是我用来执行搜索和索引操作的代码片段:

搜索:

Directory directory = getIndexDirectory();
IndexReader indexReader = DirectoryReader.open(directory);
IndexSearcher is = new IndexSearcher(indexReader);
...


private Directory getDirectory() throws Exception {
    final File dir = new File(...);
    return FSDirectory.open(dir.toPath());
}
Run Code Online (Sandbox Code Playgroud)

对于索引,我使用以下方法获取索引编写器,将参数传递给同一目录:

private IndexWriter getIndexWriter(final Directory directory) throws Exception {
    return new IndexWriter(directory, getIndexWriterConfig());
}

private IndexWriterConfig getIndexWriterConfig() {
    final IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());
    config.setOpenMode(OpenMode.CREATE_OR_APPEND);
    return config;
}
Run Code Online (Sandbox Code Playgroud)

当我从头创建索引并执行所有文档的重新索引时,搜索工作正常.我可以向索引添加新文档和/或删除现有文档,搜索继续有效.但是过了一会儿(我无法理解问题的"触发器")搜索停止工作,我得到了这个IndexFormatTooOldException.

你知道这个问题可能是什么原因吗?

谢谢你的帮助!