2013-04-01 107 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过时,虽然...)