如何使用pg_search对运算符实现高级搜索?

时间:2015-05-26 23:48:03

标签: ruby-on-rails postgresql ruby-on-rails-4 pg-search

我已经在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

理想情况下,我希望能够做到的是,有人能够键入其中一个关联的文本表示(标志),并且只对该标志进行搜索过滤。

E.g。说:“名称:Bouncing Ball”,搜索将发生在name模型上名为nodes的列上。 Aka ...它会查找名称为Bouncing Ball的所有节点,而不搜索其他列或模型甚至任何关联。

当然,我希望能够进行以下搜索: owner: John Brown(搜索其所有者/用户first_name和last_name为John Brown的所有节点),comment: Manhattan(在副本中搜索具有文本Manhattan注释的所有节点,等等。

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

1 个答案:

答案 0 :(得分:4)

您是否尝试过使用" Dynamic search scopes"的组合?用一些控制器处理搜索字符串?

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