在.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