1

我正在使用 AzureDirectory 和 Lucene .NET 2.9.4,但我有两个问题:

  1. 搜索器似乎没有那么快。我正在使用这些设置进行索引: indexWriter.SetUseCompoundFile(false); indexWriter.SetMergeFactor(1000); 索引大约是 3.5gb,它有 12.126.436 个文档。即使索引已经在本地磁盘上,创建 indexSearcher 也需要大约 5 分钟或更长时间。索引是否太大?我尝试在两个字段上使用 MultiFieldQueryParser 执行单个术语搜索。字段上的 TermVector 已关闭
  2. 建议到处只创建 indexSearcher 的实例并在查询之间共享它(实际上创建速度很慢),但我不知道如何在各种 web 之间共享 Searcher 单例(它是执行搜索的类)要求。如果我在 webrole 类上创建单例,那么如何使用该实例来执行搜索?此时,每个 Web 请求都会重新创建单例。

非常感谢

4

2 回答 2

1

实际上,我已经将 Lucene.NET 的确切版本与 AzureDirectory 一起使用,但效果不佳。我认为 AzureDirectory 不是为生产规模而编写的。

如果您查看 AzureDirectory 的源代码,它正在使用:

  • 旧版本的 Lucene 作为基础 (2.3x)
  • 到处都抛出异常(很难在生产中调试/捕获正确的异常)
  • 它使用旧的存储 API(SDK 的 pre 1.8 版本)

我最终创建了自己的专用虚拟机并使用 .net 3.0.3 Lucene.Net 库。在那个环境中像冠军一样工作,因为我不需要实现 AzureDirectory。

您应该只有一个易于使用存储队列实现的 IndexWriter。如果要限制它们写入 IndexReader 池(如 SQL 连接池),则可以拥有多个 IndexReader。我有多个运行良好,没有例外,就像他们使用 AzureDirectory 一样。

我的环境有点不同,有很多较小的索引……不是一个庞大的索引。

于 2012-11-04T21:20:58.597 回答
0

也许是人们正在谈论的 AzureDirectory,也许不是——我对此进行了调整以获得更好的性能。虽然我不会声称它是生产级的并且坚如磐石,但它可能会帮助您超越您当前使用的 AzureDirectory。

希望能帮助到你,

于 2012-11-20T15:27:21.207 回答