ApacheLucene-如何在没有并发问题的情况下更新现有索引?
我正在使用Lucene Core 3.6 我是在一个多用户环境中提出这个问题的,在这个环境中,许多并发请求将进入ApacheLucene-如何在没有并发问题的情况下更新现有索引?,lucene,Lucene,我正在使用Lucene Core 3.6 我是在一个多用户环境中提出这个问题的,在这个环境中,许多并发请求将进入索引搜索器 我是否可以使用与最初填充索引并安全写入索引时使用的相同的目录和分析器创建一个新的IndexWriter?我是否需要注意阻塞、同步或并发问题 从我的阅读中,我相信只要我打开一个新的索引搜索器,新添加的文档就可以使用,但是我也读到,出于性能原因,我希望尽可能长时间地打开一个索引搜索器。对我来说,这意味着我必须跟踪何时写入索引,以便在下一个请求时返回新的indexsearch 我
索引搜索器
我是否可以使用与最初填充索引并安全写入索引时使用的相同的目录
和分析器
创建一个新的IndexWriter
?我是否需要注意阻塞、同步或并发问题
从我的阅读中,我相信只要我打开一个新的索引搜索器
,新添加的文档就可以使用,但是我也读到,出于性能原因,我希望尽可能长时间地打开一个索引搜索器
。对我来说,这意味着我必须跟踪何时写入索引,以便在下一个请求时返回新的indexsearch
我怀疑我选择的目录
实现会对此产生影响。到目前为止,我只使用了RAMDirectory
编辑:更新标题以更好地澄清我的问题。使用SearchManager。Mike McCandless有一个关于搜索经理和NRT经理的介绍,这可能会有所帮助
你可以在网上阅读关于Lucene如何实现近实时(NRT)索引更新的各种文章,但要回答你的基本问题:应该只打开一个IndexWriter,但更新后会从该作者那里打开新的读者。让读卡器尽可能长时间地打开是很好的,但由于使用NRT,更新来自内存,因此这是一个非常快速的周转(通常为几十毫秒)。感谢您的链接。那个绅士的博客是这个话题的丰富资源。