Lucene.Net Searcher找不到新文件

时间:2014-11-10 11:23:20

标签: lucene lucene.net

我有一个应用程序,用户将数据插入到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的情况下确保读取最新数据?

1 个答案:

答案 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