自定义 pg_search 以仅显示当前用户的内容

Customize pg_search to only show current user's content

我有一个多用户站点,我希望用户能够全文多模型搜索他们自己的内容。

我的工作模式belongs_to::用户。这是 work.rb 的片段:

class Work < ApplicationRecord
  include PgSearch
  belongs_to :user
  …

理想的场景在我的控制器中是这样的:

@results = PgSearch.multisearch('spring').where(:_user_id => current_user.id)

我可以使用 Searchkick gem 和 Elasticsearch 轻松完成此操作,方法是使用以下代码行:

@results = Searchkick.search query, where: {user_id: current_user.id}

不幸的是,我不能再使用 Elasticsearch。

如何在 pg_search 中实现类似的功能?

非常感谢

您可以按照 pg_search_scope

中的说明使用 pg_search_scope

你的情况是pg_search_scope multi-search

我刚刚开始使用 PgSearch,但根据我的观察,您只能对发送到他们数据库的数据应用过滤器 pg_search_documents。因此,您不能隔离特定用户以进行稍后的搜索。他们只是将各个字段连接到他们的内容字段中,并引用他们来自的模型和记录。这允许轻松搜索以找到符合条件的记录,但随后您必须 post 处理数据。

要执行您的建议,需要为每个用户创建一个搜索 table。

如果您在反对条件中包含 user_id(应该在内容中),那么您可以 post 快速处理数据,因为 ID 将在内容中。如果它在 :against 列表的末尾,它将在内容的末尾,因此您可以快速剥离它并对其进行处理