10

我已经在我的Node模型上实现了 PgSearch,如下所示:

include PgSearch
pg_search_scope :node_search, against: [:name, :user_id, :circa],
    using: { tsearch: { any_word: true} },
    :associated_against => {
      comments: [:message],
      user: [:first_name, :last_name, :email],
      memberships: [:relation]
    }

在我的控制器中,我有这个:

if params[:search]
  @nodes = Node.node_search(params[:search])
end

理想情况下,我希望能够做的是让某人能够输入其中一个关联的文本表示(标志),并在该标志上设置搜索过滤器。

例如:“名称:Bouncing Ball”,搜索将发生在模型上调用的列namenodes。Aka...它将查找具有名称的所有节点,Bouncing Ball而不搜索其他列或模型甚至任何关联。

自然,我希望能够进行如下搜索:( owner: John Brown搜索所有者/用户 first_name 和 last_name 为 John Brown 的所有节点),comment: Manhattan(搜索对Manhattan副本中的文本有评论的所有节点,等等上。

如何使用 PgSearch 实现这一目标?

4

1 回答 1

4

您是否尝试过将“动态搜索范围”与搜索字符串的某些控制器处理结合使用?

name: Bob,解析出列/关系和搜索值,然后将其传递给带有 lambda 块的 pg_search_scope?

于 2015-05-29T14:38:45.187 回答