用例
我有可能有数百万份文件的索引。我想对这些文件的一部分(约25,000份文件)进行大约20,000次搜索。这些25'000个文档可能占用Solr中存储的大约100 MB(包括存储和索引文本字段)。
问题
随着索引文档数量的增加,查询的性能会下降很多。例如,运行20'000次搜索,在100'000文档索引上达到25,000个文档大约需要4分钟。在200'000文档索引上运行相同的搜索大约需要20分钟。
那么在用搜索命中它们之前,有没有办法在RAM中缓存这些25'000个文件?
更新
有些事情确实有所帮助:
减少返回的行数(几乎在所有情况下我都必须遍历返回的结果,并且在几乎所有情况下,不超过100个匹配结果,但我已将行设置为a非常大的值。减少行数会使性能提高2倍左右。这看起来有点直观。如果只有79个匹配并且我将返回的行数设置为100,那么它比79个匹配的情况下的表现更好并且我设置了行在第一种情况下,Solr已经返回找到的项目数并快速完成。为什么会出现性能差异?)
减少多线程(我添加了多个线程进行查询,因为在开发框中有更多资源可用。在资源受限的生产盒上,它减慢了速度。只使用一个或者两个线程让我的速度提高了2倍。)
有些事情没有真正帮助:
拆分字段查询(我已经在任何可能的地方使用了字段查询,但我将它们合并为每个查询{f}的一个fq。将它们拆分为fq=name:a AND type:b
将它们单独缓存(参见Apache Solr documentation)并可以提高性能。但在这种情况下,它并没有产生太大的影响。
更改缓存设置在这种情况下,filterCache似乎最具潜力。但是,增加它或改变它的设置并没有太大的区别。
答案 0 :(得分:2)
推荐用于表现的一些事项:
尝试开发查询以限制结果集。大的结果集,特别是如果使用分组和分面将会破坏性能。现在200,000文档索引真的很小,所以你不应该有任何问题,但我想我在你扩展时会提到这个。