当使用Lucene.Net和ASP.NET时,我可以想象一个Web请求可以触发对索引的更新,而另一个Web请求正在执行搜索.Lucene.Net是否内置了管理并发访问的能力,或者我是否必须对其进行管理,以避免"被其他进程使用"错误?
编辑:阅读文档和实验后,我认为这是我所学到的:有两个问题,线程安全和并发.多线程是"安全的",因为你不能对索引做任何坏事.但是,以一个锁定索引的对象为代价是安全的.第二个对象将出现并抛出异常.因此,您不能打开搜索并期望另一个线程中的编写者能够更新索引.如果线程正在忙于更新索引,那么尝试创建搜索器将失败.
此外,搜索者会看到索引在打开时的状态,因此如果您保留它们并更新索引,他们将看不到更新.
我希望我的搜索者能够看到最新的更新.
我的设计,到目前为止似乎工作,是我的作家和搜索者共享锁,以便他们不会失败 - 他们只是等待 - 直到当前的写或搜索完成.