繁体   English   中英

Lucene在同时搜索和索引时会阻塞

[英]Lucene blocks while searching and indexing at the same time

我有一个Java应用程序在“近实时”模式下使用Lucene(最新版本,撰写本文时为5.2.1)。 它具有一个网络连接以接收对索引文档的请求,并具有另一个用于搜索请求的连接。

我正在测试相当大的文档(几兆字节的纯文本)和每个字段具有不同分析器的多个版本的测试。 其中之一是带有Beider-Morse过滤器的语音分析器,对某些文档的索引可能要花费大量的时间(在某些情况下需要一分钟)。 大部分时间都用在对IndexWriter.addDocument(doc)的调用中;

我的问题是,在对文档建立索引时,搜索将被阻止,并且直到索引操作完成后才进行处理。 阻止搜索超过几秒钟是不可接受的。

在每次搜索之前,我需要执行以下操作:

DirectoryReader newReader = DirectoryReader.openIfChanged(reader, writer, false);

if (newReader != null)
{
    reader = newReader;
    searcher = new IndexSearcher(reader);
}

我猜这是导致问题的原因。 但是,这是我进行搜索时获取最新更改的唯一方法。 我希望总体上保持这种行为,但是如果搜索被阻止,我将不介意使用索引的旧版本。

有没有什么办法解决这一问题?

在其他选项中,请考虑始终打开IndexWriter并根据需要对其执行“提交”。

然后,您应该请求它的索引读取器(而不是目录),并根据需要刷新它们。 或者简单地使用SearcherManager ,它不仅会为您刷新搜索者,而且还将维护一个阅读器池并管理对它们的引用,从而避免在索引内容未更改的情况下重新打开。

在这里查看更多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM