Java 在什么条件下对lucene索引(compass)执行I/O操作(移动/替换)是安全的

Java 在什么条件下对lucene索引(compass)执行I/O操作(移动/替换)是安全的,java,lucene,io,indexing,compass-lucene,Java,Lucene,Io,Indexing,Compass Lucene,有时需要从头开始重新构建lucene索引。由于我不希望在构建时索引在几个小时内不完整,因此我使用一个单独的compass实例来构建新索引,然后在文件系统中替换它。 在执行此操作之前,使用SearchEngineIndexManagerstop停止所有compass实例,然后使用SearchEngineIndexManagerstart重新启动它们 然而,在这个操作过程中,索引似乎时不时地被破坏 当SearchEngineIndexManger停止时,替换文件系统中的索引是否不安全? 如果我需要对

有时需要从头开始重新构建lucene索引。由于我不希望在构建时索引在几个小时内不完整,因此我使用一个单独的compass实例来构建新索引,然后在文件系统中替换它。 在执行此操作之前,使用SearchEngineIndexManagerstop停止所有compass实例,然后使用SearchEngineIndexManagerstart重新启动它们

然而,在这个操作过程中,索引似乎时不时地被破坏

当SearchEngineIndexManger停止时,替换文件系统中的索引是否不安全?
如果我需要对文件系统中的Lucene索引进行操作,还有其他必要的预防措施吗?

< P>如何将服务器放入只读模式,然后在具有自己索引的第二个Lucene实例上启动重新索引。完成索引后,关闭所有服务器,并将新索引提供给主lucene服务器。

我在停止IndexManager之后和重新启动IndexManager之前添加了5秒睡眠时间,成功地解决了这个问题。这可能是一个丑陋的解决方案,但对我有效


当然,在重新启动后,我还添加了一个对SearchEngineIndexManager的调用。

好吧,这听起来与我目前正在做的非常相似-但是给出新索引的步骤有时似乎会导致损坏,即使SearchEngineIndexManager在这样做之前被停止了…我已经成功地使用了备份的索引。也许可以检查配置文件是否完全相同,尤其是schema.xmlBTW:我认为问题可能是由于重新启动索引管理器后未清除其缓存造成的。我会做一些测试,让你知道它是否有帮助。看一看可能也有帮助。