gpt4 book ai didi

java - Lucene 搜索停止工作

转载 作者:行者123 更新时间:2023-12-01 05:02:46 25 4
gpt4 key购买 nike

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

我的问题是它在一段时间后停止工作。 1天左右效果很好。但 1 天后,它停止返回结果(即服务正在运行,但结果为 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()。不过,可以找到更好的解决方案。重用读取器,例如,当索引内容发生变化时可以刷新读取器。

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

关于java - Lucene 搜索停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13177410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com