很抱歉这个简单的问题,但似乎没有任何明显的方法。根据文档,建议在内存中保留一个IndexWriter
的实例,可以一次又一次地用于更新,而不是为每次更改打开和关闭一个实例(这要贵得多)。 / p>
但是,文档还指出,如果发生异常(例如IndexWriter
),则应关闭OutOfMemoryException
。
因此,我需要一些方法来检查我的IndexWriter
实例是否有效,假设它可以被其他一些操作关闭。
我意识到如果我在关闭时尝试使用它会产生异常,但是我会在需要之前检查是否需要创建一个新的IndexWriter
,所以没有失败发生。
在我看来,一个简单的IsOpen
属性/方法将是一个明显的补充。
思想:
我想如果我能确保我的课程是唯一能够关闭IndexWriter
的课程,我可以在关闭时将其设置为null
,并检查以确保它不是每当我使用它时null
,但这不会处理IndexWriter
自行关闭的情况(如果现在或将来可能出现这种情况)。
另一个想法是我可以尝试在try / catch块中使用它并使用异常来指示它需要重新打开,但这似乎不是非常有效/优雅。我将使用什么方法来测试IndexWriter
的有效性?
答案 0 :(得分:3)
如果你得到内存不足异常(或任何类型的异常,真的),这可能是一个大问题。您尝试编写的更改可能无法编写,并且您的索引甚至可能已损坏,具体取决于异常发生的时间/方式。
因此,处于故障状态的IndexWriter
是一种特殊情况,我认为它肯定需要使用例外,即尝试/捕获。
(我不认为你的捕获会“重新打开作者。”根据异常情况,你可能需要重新索引一些东西,可能是从头开始。当然你不应该期望在你的作家中得到例外的常规发生。)
答案 1 :(得分:1)
我认为如果IndexWriter
在访问时关闭,AlreadyClosedException
会抛出IndexWriter
(请参阅ensureOpen)。因此,如果null
不是{{1}},则可以处理。
HTH