自定义 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
我刚刚开始使用 PgSearch,但根据我的观察,您只能对发送到他们数据库的数据应用过滤器 pg_search_documents。因此,您不能隔离特定用户以进行稍后的搜索。他们只是将各个字段连接到他们的内容字段中,并引用他们来自的模型和记录。这允许轻松搜索以找到符合条件的记录,但随后您必须 post 处理数据。
要执行您的建议,需要为每个用户创建一个搜索 table。
如果您在反对条件中包含 user_id(应该在内容中),那么您可以 post 快速处理数据,因为 ID 将在内容中。如果它在 :against 列表的末尾,它将在内容的末尾,因此您可以快速剥离它并对其进行处理
我有一个多用户站点,我希望用户能够全文多模型搜索仅他们自己的内容。
我的工作模式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我刚刚开始使用 PgSearch,但根据我的观察,您只能对发送到他们数据库的数据应用过滤器 pg_search_documents。因此,您不能隔离特定用户以进行稍后的搜索。他们只是将各个字段连接到他们的内容字段中,并引用他们来自的模型和记录。这允许轻松搜索以找到符合条件的记录,但随后您必须 post 处理数据。
要执行您的建议,需要为每个用户创建一个搜索 table。
如果您在反对条件中包含 user_id(应该在内容中),那么您可以 post 快速处理数据,因为 ID 将在内容中。如果它在 :against 列表的末尾,它将在内容的末尾,因此您可以快速剥离它并对其进行处理