“移动到现有主题”搜索静默失败,而网站搜索仍然有效

您好,

我注意到**“移动到现有主题”**模态框(此功能以前在我的网站上可以正常工作,因此这似乎是一个回归问题)存在问题:

  • 搜索主题中输入内容不会筛选结果
  • 网络请求返回 200 且参数正确
  • 浏览器控制台中没有 JavaScript 错误
  • 全站 /search 按预期工作
  • 该问题在重建后仍然存在

正在发出的示例请求:
/search/query?term=Eve Park&type_filter=topic&search_for_id=true&restrict_to_archetype=regular

选择器列表似乎仍然是一组静态主题,并且随着 term 的变化而没有改变。


在进行客户端调试后,我最初怀疑这可能是由于 Postgres 中未启用 pg_trgm 导致的,但在继续之前想确认一下。

我运行了以下命令:

./launcher enter app
rails c
ActiveRecord::Base.connection.execute(
  "SELECT extname FROM pg_extension WHERE extname = 'pg_trgm';"
).to_a

如果命令返回:

[]

则此诊断有效。

然而,它返回的是:

[{"extname"=>"pg_trgm"}]

因此 pg_trgm 已启用,这似乎不是根本原因。


因此,我打算运行以下命令:

./launcher enter app
rake search:reindex

这可能有参考价值,因为我的论坛的某一特定类别有非常多的主题。


令人困惑的是:

  • Discourse 其他方面仍能正常运行
  • 完整的 /search 按预期工作
  • 主题移动自动完成功能静默降级,而不是发出警告

作为调试的一部分,我还启用了 search prefer recent posts(搜索偏好最近帖子)设置并重新加载了浏览器。这对行为没有影响——“移动到现有主题”搜索仍然不会随着我的输入而筛选结果。

由于该设置仅影响完整的 /search 排名,而不影响主题选择器端点,这与问题特定于 /search/query 而非一般搜索性能的观点是一致的。


在运行 rake search:reindex 之前,我想对推理进行一次验证:

主题移动选择器使用 /search/query 并设置了 search_for_id=true,这比完整的 /search 端点更直接地依赖于索引查找。因此,部分过时或不一致的搜索索引可能会影响选择器,而完全搜索似乎仍然有效。

考虑到:

  • 调用了该端点,
  • 响应返回 200,
  • pg_trgm 已启用,
  • 切换 search prefer recent posts 没有效果,

进行一次完整的 rake search:reindex 似乎是排除索引不一致性的下一个合乎逻辑的步骤。此外,缺乏任何警告或反馈,从管理员用户体验的角度来看,这尤其令人困惑。

1 个赞

依我的经验,那个搜索从来就不太可靠。例如,还有这个报告:https://meta.discourse.org/t/topic-cant-be-found-when-searching-for-a-topic-verbatim-when-moving-a-post/308350。
我通常输入主题 ID,然后使用站点的搜索功能来查找它。

1 个赞

谢谢——这提供了有用的背景信息,并且链接的报告看起来非常相似。

奇怪的是,在我撰写原始帖子时,它确实表现出“无响应”:/search/query 正在使用 term=Eve Park 等参数被调用(200 响应),但选择器列表保持静态,完全没有细化。

从那以后,我就可以并排地在另一个浏览器窗口中重现预期的“响应式搜索”行为(如我的安全模式录像所示)。

除了我在原始帖子中描述的内容之外,我没有对服务器进行任何更改,所以我目前的怀疑是我最初遇到了以下情况之一:

  • 客户端状态问题(缓存资源/硬刷新差异/主题组件交互),或者
  • 查询边缘情况,其中某些术语返回的结果不如预期(逐字/标点符号/停用词/排序),类似于您链接的“逐字移动搜索找不到主题”报告。

接下来,我将比较“无响应”情况和“响应式”情况(相同术语)下 /search/query实际 JSON 响应,我还会使用/不使用主题再次运行安全模式,看看这是否相关。

如果有人知道移动主题选择器(与完整 /search 相比)使用的确切匹配规则或其不同之处,那将非常有帮助——我正试图确定这是一个已知的限制/边缘情况还是回归。