Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
永久解决Lucene LockActainFailed异常(在Java中)_Java_Lucene - Fatal编程技术网

永久解决Lucene LockActainFailed异常(在Java中)

永久解决Lucene LockActainFailed异常(在Java中),java,lucene,Java,Lucene,我正在从事使用Lucene搜索(不使用Solar的简单Lucene库)的Java项目。当我运行project时,它会被卡住,一段时间后它会显示org.apache.lucene.store.lockGetainFailedException:Lock-get超时异常。 解决此问题的最快、最简单的方法是删除lucene indexing文件夹中的write.lock文件,然后重新启动tomcat。但当我运行我的应用程序时,它会显示相同的异常。我想永久解决这个问题 请在这方面帮助我。获得该错误是您处

我正在从事使用Lucene搜索(不使用Solar的简单Lucene库)的Java项目。当我运行project时,它会被卡住,一段时间后它会显示
org.apache.lucene.store.lockGetainFailedException:Lock-get超时异常。

解决此问题的最快、最简单的方法是删除lucene indexing文件夹中的
write.lock
文件,然后重新启动tomcat。但当我运行我的应用程序时,它会显示相同的异常。我想永久解决这个问题


请在这方面帮助我。

获得该错误是您处理
IndexReader
IndexWriter
s的方式出现错误的明显迹象。您可能正在为同一目录打开多个。您不应该直接处理它们,而应该使用
NRTManager
SearcherManager
,它们根据最佳实践自动处理重新打开。

获得该错误是处理
IndexReader
IndexWriter
的方式出现错误的明显迹象。您可能正在为同一目录打开多个。您不应直接处理它们,而应使用
NRTManager
SearcherManager
,它们根据最佳实践自动处理重新打开的操作。

Topolink这不是“IndexWriter”问题。我非常小心地关闭和重新打开了它。您能告诉我导致此异常发生的其他可能原因吗?那么,您能用代码编写一个可靠地再现此异常的小示例吗?我不知道在这方面有任何Lucene bug。它还可以是特定于平台和特定于目录实现的。您可以尝试使用特定的目录实现,而不是默认的目录实现。另一种可能是,您的应用程序(进程)只打开一个写入程序,但恰好有多个进程同时运行…另一种可能与Topolink的想法非常类似,如果您只打开了一个open IndexWriter,然后尝试使用IndexReader.delete。解决方案:永远不要使用IndexReader.delete(如果您使用的是v4,那么这不是问题所在,因为该方法已经过时,而不仅仅是不推荐使用)。此外,如果您的应用程序没有正确关闭,并且在退出时无法关闭写入程序,那么当您再次运行它时,它可能会出现此问题,并尝试打开一个写入程序。在这种情况下,您需要确保正确地关闭应用程序,正确地处理错误和异常,并且不使用SIGKILL(kill-9)退出进程。我非常小心地关闭和重新打开了它。您能告诉我导致此异常发生的其他可能原因吗?那么,您能用代码编写一个可靠地再现此异常的小示例吗?我不知道在这方面有任何Lucene bug。它还可以是特定于平台和特定于目录实现的。您可以尝试使用特定的目录实现,而不是默认的目录实现。另一种可能是,您的应用程序(进程)只打开一个写入程序,但恰好有多个进程同时运行…另一种可能与Topolink的想法非常类似,如果您只打开了一个open IndexWriter,然后尝试使用IndexReader.delete。解决方案:永远不要使用IndexReader.delete(如果您使用的是v4,那么这不是问题所在,因为该方法已经过时,而不仅仅是不推荐使用)。此外,如果您的应用程序没有正确关闭,并且在退出时无法关闭写入程序,那么当您再次运行它时,它可能会出现此问题,并尝试打开一个写入程序。在这种情况下,您需要确保正确关闭应用程序,正确处理错误和异常,并且不使用SIGKILL(kill-9)退出流程。