【发布时间】:2026-02-17 17:10:02
【问题描述】:
用例
我有一个可能包含数百万个文档的索引。我想对这些文档的一个子集(大约 25,000 个文档)进行大约 20'0000 次搜索。这 25'000 个文档可能会占用存储在 Solr 中的大约 100 MB(由存储和索引文本字段组成)。
问题
随着索引文档数量的增加,查询的性能会下降很多。例如,运行 20'000 次搜索,在 100'000 文档索引上命中 25'000 个文档,大约需要 4 分钟。在 200'000 个文档索引上运行相同的搜索大约需要 20 分钟。
那么有没有办法在搜索到它们之前将这 25,000 个文档缓存在 RAM 中?
更新
一些真正有帮助的事情:
减少返回的行数(在几乎所有情况下,我都必须遍历返回的结果,并且在几乎所有不超过 100 个匹配结果的情况下,但我已将行设置为非常大的值。减少行数将性能提高了大约 2 倍。这似乎违反直觉。如果只有 79 个匹配项并且我将返回的行数设置为 100,它的性能要好于 79 个匹配项并且我设置行的情况计数到 1000。在第一种情况下,Solr 已经返回找到的项目计数并且速度很快。为什么会有性能差异?)
减少多线程(我添加了多个线程用于查询,因为在开发盒上有更多可用资源。在资源受限的生产盒上,它会减慢速度。只使用一个或两个线程让我的速度提高了大约 2 倍。)
一些没有真正帮助的事情:
拆分字段查询(我已经在任何可能的地方使用字段查询,但我将它们组合在一个 fq 中为每个查询
fq=name:a AND type:b。将它们拆分为 @987654323 @ 单独缓存它们(参见Apache Solr documentation)并可以提高性能。但在这种情况下并没有太大的不同。更改缓存设置在这种情况下 filterCache 似乎最有潜力。然而,增加它或改变它的设置并没有太大的不同。
【问题讨论】:
标签: performance caching solr