【发布时间】:2015-06-24 08:04:56
【问题描述】:
我有一个在“近实时”模式下使用 Lucene(最新版本,撰写本文时为 5.2.1)的 Java 应用程序;它有一个网络连接来接收索引文档的请求,另一个连接来接收搜索请求。
我正在测试一个包含相当大的文档(几兆字节的纯文本)的语料库,以及使用不同分析器的每个字段的多个版本。其中一个是带有 Beider-Morse 滤波器的语音分析器,某些文档的索引可能需要相当长的时间(在某些情况下超过一分钟)。大部分时间都花在调用 IndexWriter.addDocument(doc);
我的问题是,在对文档进行索引时,搜索会被阻止,并且在索引操作完成之前不会对其进行处理。阻止搜索超过几秒钟是不可接受的。
在每次搜索之前,我都会执行以下操作:
DirectoryReader newReader = DirectoryReader.openIfChanged(reader, writer, false);
if (newReader != null)
{
reader = newReader;
searcher = new IndexSearcher(reader);
}
我想这就是导致问题的原因。但是,这是我进行搜索时获取最新更改的唯一方法。我希望总体上保持这种行为,但如果搜索会被阻止,我不介意使用稍微旧版本的索引。
有没有办法解决这个问题?
【问题讨论】:
标签: java multithreading performance lucene