大型网站的搜索查询超时

大家好,

我们最近发现 /search 查询经常出现超时问题。我们对一些搜索词进行了基准测试,发现某些查询可能需要长达 2 分钟才能完成。我们看到了这篇 帖子,但想请教一下是否还有其他建议来应对这个问题。以下是与我们具体情况相关的一些信息:

  • 我们最大的站点(超时最频繁的站点)大约有 1,700,000 篇帖子。
  • 我们使用的是默认的 PostgreSQL autovacuum 设置。我们收集了一些相关表的统计数据:categoriespoststopicspost_search_datausers,这些表大约每天执行一次 vacuum,因此我们认为死行导致搜索变慢的可能性不大。
  • 我们手动运行了 Jobs::ReindexSearch.new({}),但没有看到明显的改善。

我们考虑在该站点上运行 rake search:reindex,我们知道这将需要相当长的时间,但想请教您是否有其他建议?

提前感谢您的帮助。

一种快速且简单的提升搜索速度的方法是使用设置项“优先显示近期帖子”和“近期帖子数量”。通过优先展示近期帖子来填充搜索结果,这种方法效果很好。

除此之外,您还需要对数据库性能进行分析,检查执行计划、成本等。对于大型论坛,您需要更多内存以维持性能(并相应调整 PostgreSQL 设置)。

如果其他方法都无效,您也可以尝试访问 Discourse Algolia Search 将 Algolia 搜索添加到您的 Discourse 论坛。

嘿 Falco,

感谢你的建议,search prefer recent posts 这个技巧确实帮了大忙,搜索功能大部分已经恢复正常。我们怀疑部分索引可能已损坏,因此也开始着手排查,但眼下这个方法极大地缓解了问题。