我有一个应用程序,用户将数据插入到Lucene.NET(v3.0.3.0)中,应该可以在几秒钟后查询新数据。
目前,我正在为每个执行的查询创建一个新的IndexSearcher实例。据说这很慢,出于性能原因,建议使用IndexSeacher的缓存实例。
只要我将IndexSearcher放在缓存中,查询就会引用旧数据。找不到新添加的文件。
我试着打电话
searcher.IndexReader.Reopen();
但这没有帮助。只有以下代码才能确保搜索返回最新文档:
Lucene.Net.Store.Directory dir = Lucene.Net.Store.FSDirectory.Open(@"c:\lucene\test");
searcher = new IndexSearcher(dir);
如何在不必为每个查询重新创建新的IndexSearcher的情况下确保读取最新数据?
答案 0 :(得分:1)
好的我明白了。
我的错误是我认为IndexReader.Reopen()会导致IndexReader重新打开。实际上,情况并非如此。相反,该方法返回一个新的IndexReader,可用于创建新的IndexSearcher实例。
使用多个线程,这可能会变得有点棘手。 Lucene 3.5有一个SearchManager类可以帮助解决这个问题,但我现在使用的是3.0.3版本的Lucene.NET 3.0。
以下项目提供了可以在lucene 3.0中使用的searchManager类的端口: https://github.com/NielsKuhnel/NrtManager/tree/master/source/Lucene.Net.Contrib.Management