修补 Discourse 的搜索功能

我正在编写一个插件,用于为每个用户存储一些额外数据(类似于 discourse-user-notes,但不仅限于管理员),并且希望能够针对这些数据进行搜索。

这可能需要对 lib/search.rb 中的某些部分进行补丁修改。我知道 Algolia 搜索插件会覆盖搜索框 弹出窗口 中显示的内容,但理想情况下,我希望这也能影响实际的结果页面。

有人对从哪里入手有什么建议吗?

您可以从插件中扩展搜索功能,例如,您可以添加一个高级过滤器,如下所示:

  require_dependency 'search'
  if Search.respond_to? :advanced_filter
    Search.advanced_filter(/with:video/) do |posts|
      posts.where("posts.cooked LIKE '%<video %'")
    end
  end

上述代码将仅在搜索框中包含 with:video 关键字时,显示包含视频的帖子。另请参阅 徽章高级过滤器,以了解考虑用户数据的搜索查询示例。

很好。添加高级筛选器是否意味着这些结果也会出现在普通(非高级筛选)搜索中?

是的,您既可以在搜索弹窗中使用高级关键词,也可以在全文页面搜索中使用。

我们不再需要保留这个保护机制了,该 API 已经存在很长时间了。

关于这个问题,PluginStore 在这里能否很好地扩展?我预计这会导致大量的全表扫描(因为键上没有适合 LIKE 的索引),那么为额外的用户数据创建一个一对一的表是否更好?

应避免使用 PluginStore,请为你的插件创建数据表。