返回大型结果集对Lucene性能的影响



有人知道让Lucene(或Solr)返回非常长的结果集而不是通常的"前10名"会对性能产生什么影响吗。我们希望返回用户搜索的所有结果(可能是大约100000个文档),然后在返回实际结果之前对返回的文档ID进行后处理。

我们目前的索引包含大约1至200万份文档。

正如spraff所说,任何形式的"X会足够快吗?"的问题的答案都是:"这取决于。"

我会担心:

  1. 如果这些文档很大,特别是如果您已经存储了要检索的字段,您将丢弃缓存
  2. 由于#1,您将有大量的磁盘IO,这是非常缓慢的
  3. Lucene的性能随着返回文档的数量而增长。因此,即使忽略诸如"磁盘比RAM慢"之类的实际考虑,它也会更慢

我不知道你在做什么,但有可能用自定义的评分算法来完成。

当然,仅仅因为搜索所有文档的速度会变慢,并不意味着它会太慢而无法使用。一些faceting实现基本上可以获得所有匹配的文档,并且这些实现对许多人来说都足够执行。

我能够在2.5秒内返回100000行,索引了2700万个文档(每个文档有1k字节,大约有600B的文本字段)。硬件并不普通,它有128 GB的RAM。Solr的内存使用情况是这样的:Res是50GB,Virt是106GB。

在查阅了8000万个文档后,我开始看到性能下降。目前正在调查如何将硬件与问题相匹配。希望对你有所帮助。

最新更新