在.net Web应用程序中使用Lucene API。 我想为所有请求使用Indexsearcher的相同实例。因此我们将indexsearcher实例存储在http缓存中。在多个请求中使用indexSearcher的相同实例的问题
这里是我的同一代码:
if (HttpRuntime.Cache["IndexSearcher"] == null)
{
searcher = new IndexSearcher(jobIndexFolderPath);
HttpRuntime.Cache["IndexSearcher"] = searcher;
}
else
{
searcher = (IndexSearcher)HttpRuntime.Cache["IndexSearcher"];
}
当我执行下面的语句,我得到一个运行时错误:“对象引用不设置到对象的实例。”
Hits hits = searcher.Search(myQuery);
我在这里失踪了什么?
感谢您的阅读!
两条评论:1.)你是否有与存储在HttpRuntime中的其他对象相同的问题? 2.)以防万一你错过了,已经打开的IndexSearcher不能在索引中看到新的条目。所以如果你的应用程序是一个长期运行的搜索索引更新,你可能应该重新考虑对所有请求使用相同的IndexSearcher实例 – StudioEvoque 2009-05-31 12:28:34
fyi,我能够存储和检索HttpRuntime中的其他对象 – 2009-06-11 02:49:49
我不熟悉.net或HttpRuntime。你的代码有一个问题是缺乏同步。但是这只会导致性能不佳和不正确问题。您仍然可以尝试同步初始化。 第二个问题我怀疑是由于某些问题,搜索者根本没有得到初始化。在创建新的IndexSearcher后,检查搜索器是否为空。 – 2009-06-12 06:10:38