查询文档子集时提高 Solr 性能

Increase Solr performance when querying a subset of documents

用例

我有一个可能包含数百万个文档的索引。我想对这些文档的一个子集(大约 25'000 个文档)进行大约 20'0000 次搜索。这 25'000 个文档可能会占用 Solr 中存储的大约 100 MB 的空间(由存储和索引文本字段组成)。

问题

随着索引文档数量的增加,查询的性能下降很多。例如 运行 在 100'000 个文档索引上命中 25'000 个文档的 20'000 次搜索大约需要 4 分钟。 运行 在 200'000 个文档索引上进行相同的搜索大约需要 20 分钟。

那么有什么方法可以在搜索前将这 25'000 个文档缓存在 RAM 中?

更新

一些真正有用的东西:

一些没有真正帮助的事情:

关于性能的一些建议:

  • 盒子上有足够的备用 RAM,以便索引文件可以在 OS 缓存中
  • 尝试使用 SolrConfig 中的 solr 缓存设置
  • 提交后尝试自动加热
  • 尝试开发您的查询以限制结果集。大型结果集,特别是如果使用分组和分面会降低性能。现在 200,000 个文档索引确实很小,所以你应该没有任何问题,但我想我会在你扩展时提到这个。

    • 尽可能使用过滤器查询 (FQ)。它们比在 q 中执行 field:val 快得多,而且它们被缓存了。