Lucene搜索停止工作

时间:2012-11-01 12:47:01

标签: java search lucene

我在我的一个项目中使用lucene进行搜索。它作为端口上的单独服务运行。每当查询到来时,都会向此服务器发送一个请求,并返回结果映射。

我的问题是它在一段时间后停止工作。它工作正常1天左右。但是在1天后它停止返回结果(即服务正在运行,但结果为0)。为了让它恢复工作,我必须重新启动服务,然后它再次开始正常工作。

请提出一些解决方案。如果需要,我很乐意提供更多信息。

感谢。

1 个答案:

答案 0 :(得分:0)

我是否猜测一个容易犯的错误,可能导致这种行为,也许你随着时间的推移打开一堆索引编写器或索引读取器,而不是正确关闭它们,从而耗尽了文件描述符的可用性在你的服务器上。看看'lsof'是否在'.cfs','。fdx'和/或'.fdt'上显示了很多开放描述符('ulimit -n'可用于查看最大值)。

关于IndexSearcher的一点需要注意,我看到它会引起问题:

关闭搜索者可能无法关闭基础读者。如果您将阅读器传递给搜索者,则在关闭搜索器时将不会关闭它(因为在这种情况下,它可能被其他对象使用)。 一个例子:

//Assume I have an IndexWriter named indexwriter, which I reuse.
IndexSearcher searcher = new IndexSearcher(IndexReader.open(indexwriter, true));

//Use the searcher

searcher.close();
//We close the search, but the underlying reader remains open.

现在这已经累积了一个未关闭的读者,并且打开了一些索引文件描述符。如果使用这种模式足够多次,随着时间的推移,它将停止响应。 无论如何,这是一个错误的例子。

关闭搜索器时,只需关闭阅读器就可以修复它,例如:searcher.getIndexReader().close()。但是,可以找到更好的解决方案。重用阅读器,例如,当索引内容发生变化时可以刷新。

不知道这是否是您遇到的确切问题,但可能值得注意。