2013-04-01 70 views
1

我有一個ASP.NET MVC 4個網站託管在Windows Azure上。我需要在此網站進行全文搜索,所以我使用Lucene.NET。 Lucene使用Windows Azure Blob來存儲索引文件。目前,查詢需要很長時間(大約1分鐘)。當我看着小提琴手,我注意到,285個請求被解僱掉的Blob存儲。Lucene.NET使用Windows Azure

我Blob存儲目前只中有10個文件。最大的文件只有177kb。我還注意到Dispose調用需要大約20秒。這是我的代碼。我不覺得我在做任何事情太瘋狂

IndexWriter indexWriter = InitializeSearchIndex(); 
if (indexWriter != null) 
{ 
    foreach (var result in cachedResults) 
    { 
    var document = new Document(); 
    document.Add(new Field("Name", result.Name, Field.Store.YES, Field.Index.NOT_ANALYZED)); 
    document.Add(new Field("ID", result.ID.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED)); 
    document.Add(new Field("Description", result.Description, Field.Store.YES, Field.Index.NOT_ANALYZED)); 
    document.Add(new Field("LastActivity", result.LastActivity, Field.Store.YES, Field.Index.NOT_ANALYZED)); 
    indexWriter.AddDocument(document); 
    } 
    indexWriter.Dispose(); 
} 

同時,我不知道爲什麼這要花這麼長時間。

+0

獅子座對Lucene的一個偉大的博客文章與SQL Azure的位置:http://leoncullens.nl/post/2012/11/ 18 /全文檢索用的,天青與 - LuceneNET.aspx也許它可以幫助你嗎?我有一個類似的實現,它閃電超過數百萬條記錄。 – ozz

回答

1

如果您的搜索設置爲小/界你可能想看看我寫了一個Lucene.NET目錄的高速緩存(預覽)版本 - 這將是速度遠遠超過一個blob基於目錄:

https://github.com/ajorkowski/AzureDataCacheDirectory

當然......如果你希望擁有的資料等無界數這不會是一個最佳的解決方案。

我知道Lucene.NET創建了一堆臨時文件,然後將它們組合在一起......也許調用.Optimise或類似的東西可能會在所有臨時文件實際達到將它們推到blob之前結合所有臨時文件存儲(我認爲這一步是在較新的版本Lucene.NET過時,雖然...)