我正在使用Lucene Core 3.6。
我在多用户环境的上下文中问这个问题,其中许多并发请求将进入IndexSearcher
。
我可以使用相同的IndexWriter
和Directory
创建一个新的Analyzer
我原来填充索引并安全地写入它吗?我必须注意阻塞,同步或并发问题吗?
从我的阅读中我相信,一旦我打开一个新的IndexSearcher
,我就会看到新添加的文档。但是我还读到,出于性能原因,我想保持一个IndexSearcher
为尽可能长。对我来说,这意味着我必须跟踪我何时写入索引,以便在下一个请求时返回一个新的IndexSearcher
。
我怀疑我对Directory
实施的选择会对此产生影响。直到现在我才使用RAMDirectory
。
编辑:更新标题以更好地阐明我的要求。
答案 0 :(得分:2)
使用SearchManager。 Mike McCandless有一个关于搜索管理员和NRT经理的blog post,可能会有所帮助。
您可以在线阅读各种文章,了解Lucene如何实现近实时(NRT)索引更新,但要回答您的基本问题:只有一个IndexWriter应该是开放的,但是新的读者可以从该作者开启更新。尽可能长时间地保持阅读器打开是好的,但是因为使用NRT,更新来自内存,这是一个非常快速的转变(通常是几十毫秒)。