2008-10-30 30 views
3

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

我现在已经设置了它,以便所有索引写入都在计划过程中一起处理,同时优化索引。

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

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

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

+0

出于好奇,谁说它是不理想的每个搜索打开/关闭搜索器?这真的是一件坏事吗? – 2009-12-09 14:23:20

+0

现在只注意到这一点 - 看到:http://wiki.apache.org/lucene-java/ImproveSearchingSpeed “使用IndexSearcher的一个实例 分享整个查询和跨线程应用程序中的一个IndexSearcher的。” – Donald 2010-01-05 05:03:48

回答

5

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

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

我创建了一个搜索器并保留它,以便索引不会随每次搜索一起重新加载。所有线程共享相同的搜索器。当搜索者搜索时,它抓住一个锁。

同时,我有一个IndexWriter,它在数据发生变化时更新索引。它只是稍微改变一点,所以它的任务很快。当它运行时,它抓住相同的锁,破坏搜索者,更新索引,并重新创建搜索者。新的搜索者会一直待到下一次更新索引。搜索者总是使用最新的索引。

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

0

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

相关问题