Apache Lucene - 如何在没有并发问题的情况下更新现有索引?

时间:2012-05-20 14:13:14

标签: lucene

我正在使用Lucene Core 3.6。

我在多用户环境的上下文中问这个问题,其中许多并发请求将进入IndexSearcher

我可以使用相同的IndexWriterDirectory创建一个新的Analyzer我原来填充索引并安全地写入它吗?我必须注意阻塞,同步或并发问题吗?

从我的阅读中我相信,一旦我打开一个新的IndexSearcher,我就会看到新添加的文档。但是我还读到,出于性能原因,我想保持一个IndexSearcher为尽可能长。对我来说,这意味着我必须跟踪我何时写入索引,以便在下一个请求时返回一个新的IndexSearcher

我怀疑我对Directory实施的选择会对此产生影响。直到现在我才使用RAMDirectory

编辑:更新标题以更好地阐明我的要求。

1 个答案:

答案 0 :(得分:2)

使用SearchManager。 Mike McCandless有一个关于搜索管理员和NRT经理的blog post,可能会有所帮助。

您可以在线阅读各种文章,了解Lucene如何实现近实时(NRT)索引更新,但要回答您的基本问题:只有一个IndexWriter应该是开放的,但是新的读者可以从该作者开启更新。尽可能长时间地保持阅读器打开是好的,但是因为使用NRT,更新来自内存,这是一个非常快速的转变(通常是几十毫秒)。