我无法理解 Lucene 的复杂性。任何帮助,将不胜感激。
我们使用 Windows Azure blob 来存储我们的 Lucene 索引,其中包含 Lucene.Net 和 AzureDirectory。WorkerRole 包含唯一的 IndexWriter,它每天添加 20,000 条或更多条记录,并更改少量(少于 100 条)现有文档。另一个盒子上的 WebRole 设置为获取索引的两个快照(到另一个 AzureDirectory),在两者之间交替,并告诉 WebService 在哪个目录可用时使用它。
WebService 有两个 IndexSearcher 交替,在下一个快照准备好时重新加载——一个 IndexSearcher 应该一次处理所有客户端请求(直到新的快照准备好)。IndexSearcher 有时需要很长时间(几分钟)才能实例化,而有时它非常快(几秒钟)。由于目录已经在磁盘上物理上(在这个阶段不使用 blob),我们预计它是一个快速操作,所以这是一个令人困惑的点。
我们目前有大约 800 万条记录。Lucene 搜索曾经非常快(很棒),但现在非常慢。为了改善这一点,我们开始了IndexWriter。我们备份后每天优化一次索引——网上一些资源表明经常变化的索引不需要优化,但其他资源表明需要优化,所以我们不确定。
最大的问题是,每当我们的网站流量超过单个用户时,Lucene 搜索就会超时。我们试图找出 IndexSearcher 对象是否存在瓶颈。它应该是线程安全的,但似乎有东西阻塞了请求,因此一次只执行一次搜索。该框是一个 Azure VM,设置为中等大小,因此它有大量可用资源。
感谢您提供的任何见解。显然,如果您还有其他问题,我可以提供更多详细信息,但我认为这是一个好的开始。