Performance 在查询文档子集时提高Solr性能
用例 我有一个可能有数百万文档的索引。我想对这些文档的一个子集进行大约20000次搜索(大约25000个文档)。这25000个文档可能占用存储在Solr中的大约100MB(由存储索引和文本字段组成) 问题 随着索引文档数量的增加,查询的性能会大大降低。例如,运行20000次搜索,在100000个文档索引上搜索25000个文档大约需要4分钟。在20万个文档索引上运行相同的搜索大约需要20分钟 那么,在搜索之前,有没有办法将这25000个文档缓存在RAM中 更新 一些真正有帮助的事情:Performance 在查询文档子集时提高Solr性能,performance,caching,solr,Performance,Caching,Solr,用例 我有一个可能有数百万文档的索引。我想对这些文档的一个子集进行大约20000次搜索(大约25000个文档)。这25000个文档可能占用存储在Solr中的大约100MB(由存储索引和文本字段组成) 问题 随着索引文档数量的增加,查询的性能会大大降低。例如,运行20000次搜索,在100000个文档索引上搜索25000个文档大约需要4分钟。在20万个文档索引上运行相同的搜索大约需要20分钟 那么,在搜索之前,有没有办法将这25000个文档缓存在RAM中 更新 一些真正有帮助的事情: 减少返回行
- 减少返回行计数(在几乎所有情况下,我都必须遍历返回的结果,并且在几乎所有不超过100个匹配结果的情况下,我都将行设置为一个非常大的值。减少行数可以提高大约2倍的性能。这似乎违反直觉。如果只有79个匹配,并且我将返回的行数设置为100,则性能会更好在第一种情况下,Solr已经返回find item count并快速执行。为什么会有性能差异?)
- 减少多线程(我添加了多个线程用于查询,因为在“开发”框中有更多可用资源。在资源受限的生产框中,它会减慢速度。仅使用一两个线程使我的速度提高了约2倍。)
- 拆分字段查询(我已经在任何可能的地方使用字段查询,但我正在为每个查询将它们组合在一个fq中
。将它们拆分为fq=name:a和type:b
会分别缓存它们(请参阅)并且可以提高性能。但在这种情况下,这并没有产生很大的影响fq=name:a&fq=type:b
- 更改缓存设置在这种情况下,filterCache似乎最有潜力。但是,增加或更改其设置并没有带来很大的区别
- 盒子上有足够的备用RAM,以便索引文件可以在操作系统缓存中
- 尝试在SolrConfig中使用solr缓存设置
- 在提交后使用自动预热
- 尝试开发查询以限制结果集。较大的结果集,特别是使用分组和面处理时,会降低性能。现在200000文档索引非常小,所以您应该不会有任何问题,但我想我会在扩展时提到这一点
- 尽可能使用过滤查询(FQ)。它们比在q中执行字段:val快得多,而且它们是缓存的