1

我有一个托管在 Windows Azure 上的 ASP.NET MVC 4 站点。我需要在这个站点中进行全文搜索,所以我使用了 Lucene.NET。Lucene 使用 Windows Azure Blob 来存储索引文件。目前,查询需要很长时间(大约 1 分钟)。当我查看 Fiddler 时,我注意到有 285 个请求被发送到 Blob 存储。

我的 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();
}

同时,我不确定为什么要花这么长时间。

4

1 回答 1

1

如果您的搜索集很小/有界,您可能想查看我编写的 Lucene.NET 目录的缓存(预览)版本 - 它会比基于 blob 的目录快得多:

https://github.com/ajorkowski/AzureDataCacheDirectory

当然......如果您希望拥有无限数量的文档等,这将不是最佳解决方案。

我知道 Lucene.NET 创建了一堆临时文件,然后将它们组合在一起......也许调用.Optimise或类似的东西可能会在它实际到达将它们推送到 blob 存储点之前组合所有临时文件(我认为这step 在较新的 Lucene.NET 版本中已过时...)

于 2013-04-02T11:58:37.777 回答