3

我目前正在一个 Web 应用程序中运行 Lucene.net,并且想知道性能方面的最佳方法。

我目前已对其进行设置,以便在计划的过程中一起处理所有索引写入,同时优化索引。

但是对于搜索 - 我目前正在打开和关闭每个搜索的搜索器,我知道这并不理想。

您认为在这种情况下最好的方法是什么?

处理完更新/优化后,我需要关闭并重新打开索引搜索器,因此计划的进程(这是一个 Windows 控制台应用程序)需要将其完成传达给 Web 应用程序。

4

2 回答 2

5

我刚刚将 Lucene.NET 集成到 BugTracker.NET 中。我不确定我所做的是否是最好的,但它似乎运作良好。

我在应用程序启动时创建索引。

我创建了一个搜索器并保留它,这样每次搜索都不会重新加载索引。所有线程共享同一个搜索器。当搜索者搜索时,它会抓住一把锁。

同时,我有一个 IndexWriter 可以在数据发生更改时更新索引。它只是发生了一点变化,因此它可以快速完成任务。当它运行时,它会获取相同的锁,销毁搜索器,更新索引,然后重新创建搜索器。新的搜索器会一直存在,直到索引的下一次更新。搜索者总是使用最新的索引。

您可以获取 BugTracker.NET 源代码并查看文件 my_lucene.cs 和 search_text.aspx。这一切都在这两个文件中,并且没有那么多代码。

于 2008-10-30T16:21:42.680 回答
0

您可以调用读者 IsCurrent() 方法来检查是否有可用的新版本索引,如果它重新打开它。这不是最好的方法,但很容易,如果您的要求不是很大,那就足够了。

于 2008-10-31T13:36:32.793 回答