ASP.NET Lucene性能改进问题

时间:2010-04-09 15:28:02

标签: c# asp.net search lucene solr

我编写了一个ASP.NET网站并在win'08上运行(远程托管)。该应用程序查询11个非常大的Lucene索引(每个~100GB)。我在Page_load()上打开IndexSearchers并在用户会话期间保持打开状态。

我的问题:

  1. 查询需要大约5秒才能完成 - 可以理解这些是非常大的索引 - 但用户希望更快的响应。我很想要挤出更好的表现。 (我确实查看了Apache Lucene网站并尝试了一些想法)。对if&amp ;;感兴趣你是如何进一步调整它的,特别是从asp.net的角度来看。

  2. 一个想法是使用Solr而不是直接查询Lucene。但这似乎是违反直觉的,介于两者之间的另一个抽象,可能会增加延迟。移植到Solr是否值得头痛?任何人都可以分享一些指标,了解在转换到Solr之后您获得的改进是否值得。

  3. 是否有一些密钥可以在Solr中完成,可以复制以加快响应时间?

2 个答案:

答案 0 :(得分:1)

一些问题/想法:

  • 您是否针对单个请求点击所有 11个索引?
  • 您是否可以重新组织索引,以便只打一个索引(即分片)?
  • 您是否运行过应用程序的配置文件(使用dotTrace或类似工具)?花在哪里的时间? Lucene.Net?
  • 如果大部分时间花在Lucene.Net上,那么如果你迁移到Solr,延迟应该可以忽略不计(与剩余的花费时间相比)。另外,Solr can be easily distributed可以提高性能。
  • 我不太熟悉Lucene(我使用Solr)但是如果你每个请求搜索11个索引,你可以并行运行这些搜索(例如用TPL)吗?

答案 1 :(得分:0)

最重要的是从Web层删除搜索,并将其隔离到自己的层(搜索层)。这样,你有一个专用的盒子,里面有专门的资源,它们加载了索引,并在缓存中“预热”,而不是让每个用户拥有它自己的索引阅读器的副本。