【问题标题】:Lucene.Net Searcher does not find new documentsLucene.Net Searcher 找不到新文档
【发布时间】:2014-11-10 11:23:20
【问题描述】:

我有一个应用程序,用户在其中将数据插入 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?

【问题讨论】:

    标签: lucene lucene.net


    【解决方案1】:

    好的,我想通了。

    我的错误是我认为 IndexReader.Reopen() 会导致 IndexReader 重新打开。实际上,情况并非如此。相反,该方法返回一个新的 IndexReader,可用于创建新的 IndexSearcher 实例。

    使用多个线程,这可能会变得有点棘手。 Lucene 3.5 有一个 SearchManager 类可以帮助解决这个问题,但我使用的是 Lucene.NET 3.0,目前版本为 3.0.3。

    以下项目提供了一个可以从 lucene 3.0 使用的 searchManager 类的端口: https://github.com/NielsKuhnel/NrtManager/tree/master/source/Lucene.Net.Contrib.Management

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 2011-06-21
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2018-06-05
      相关资源
      最近更新 更多