Подтвердить что ты не робот

Как реализовать расширенный поиск с операторами с pg_search?

Я реализовал PgSearch в моей модели Node следующим образом:

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

В идеале, что бы я хотел сделать, пусть кто-то сможет ввести текстовое представление (флаг) одной из ассоциаций и иметь фильтр поиска только на этом флаге.

например. скажем: "name: Bouncing Ball", где поиск будет проходить только по столбцу под названием name в модели nodes. Aka... он будет искать все узлы с именем Bouncing Ball и не искать другие столбцы или модели или даже любую из ассоциаций.

Естественно, я хотел бы иметь возможность выполнять поиск, например: owner: John Brown (который ищет все узлы, владельцем/пользователем first_name и last_name являются Джон Браун), comment: Manhattan (который ищет все узлы, которые имеют комментарий с текстом Manhattan в копии и т.д.

Как я могу достичь этого с помощью PgSearch?

4b9b3361

Ответ 1

Вы пытались использовать комбинации Динамические области поиска с некоторой обработкой контроллера строки поиска?

name: Bob, проанализируйте столбцы/отношения и значение поиска, затем передайте его в pg_search_scope с блоком лямбда?