Как получить результаты мультипоиска pg_search

Я пытаюсь использовать гем pg_search в своем приложении rails для поиска по многочисленным моделям из одной панели поиска.

Я добавил строку поиска:

   <div id="search-bar">
        <%= form_tag searches_path, method: :get do %>
          <span><%= text_field_tag :query, params[:query] %><%= submit_tag "Search", name: nil %></span>
        <% end %>
      </div>

Маршрут:

    resources :searches 

Метод индекса контроллера поиска:

    def index
    @results = PgSearch.multisearch(:query)
end

И поиск index.html.erb:

      <ul>
        <% @results.each do |result| %>
          <li><%= link_to result.searchable.title, result.searchable %></li>
        <% end %>
      </ul>

Каждая модель, которую я хочу сделать доступной для поиска, имеет что-то вроде этого:

    include PgSearch
multisearchable :against => [:content, :author]

И у меня есть такой инициализатор:

PgSearch.multisearch_options = {
  :using => {
    :tsearch => {
      :dictionary => "english"
    }
  }
}

Я создал новый элемент, чтобы убедиться, что он добавлен в таблицу pg_search_documents, и проверил терминал, чтобы убедиться, что это так.

Тем не менее, когда я ввожу поисковый запрос, в таблице результатов ничего не появляется?

Вот вывод терминала из поиска:

Started GET "/searches?utf8=%E2%9C%93&query=Test" for 127.0.0.1 at 2019-01-16 13:16:48 +0000
Processing by SearchesController#index as HTML
  Parameters: {"utf8"=>"✓", "query"=>"Test"}
  User Load (0.5ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ /Users/---/.rvm/gems/ruby-2.5.3/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
   Group Exists (0.2ms)  SELECT  1 AS one FROM "groups" LIMIT $1  [["LIMIT", 1]]
  ↳ app/controllers/application_controller.rb:34
  Category Exists (0.2ms)  SELECT  1 AS one FROM "categories" LIMIT $1  [["LIMIT", 1]]
  ↳ app/controllers/application_controller.rb:37
  Rendering searches/index.html.erb within layouts/application
  ggPgSearch::Document Load (20.6ms)  SELECT "pg_search_documents".* FROM "pg_search_documents" INNER JOIN (SELECT "pg_search_documents"."id" AS pg_search_id, (ts_rank((to_tsvector('english', coalesce("pg_search_documents"."content"::text, ''))), (to_tsquery('english', ''' ' || 'query' || ' ''')), 0)) AS rank FROM "pg_search_documents" WHERE (((to_tsvector('english', coalesce("pg_search_documents"."content"::text, ''))) @@ (to_tsquery('english', ''' ' || 'query' || ' '''))))) AS pg_search_ce9b9dd18c5c0023f2116f ON "pg_search_documents"."id" = pg_search_ce9b9dd18c5c0023f2116f.pg_search_id ORDER BY pg_search_ce9b9dd18c5c0023f2116f.rank DESC, "pg_search_documents"."id" ASC
  ↳ app/views/searches/index.html.erb:7
  Rendered searches/index.html.erb within layouts/application (24.2ms)
  Group Load (0.3ms)  SELECT "groups".* FROM "groups"
  ↳ app/views/layouts/application.html.erb:59
  Category Load (0.2ms)  SELECT "categories".* FROM "categories"
  ↳ app/views/layouts/application.html.erb:72
Completed 200 OK in 114ms (Views: 88.4ms | ActiveRecord: 21.9ms)

Теги ul присутствуют на странице, но нет элементов li, и я уверен, что термин, который я вставляю, был внутри элемента, который я создал.

Почему он не дает никаких результатов? Большое спасибо


person Emily    schedule 16.01.2019    source источник


Ответы (1)


Вы сделали следующее?

$ rails g pg_search:миграция:мультипоиск

$ рейк БД:мигрировать

Это необходимо для мультипоиска. Также существующие элементы могут быть не добавлены в документ, как вы уже знаете. Вам нужно будет «перестроить», как указано в документах. Когда вы делали новый предмет для тестирования, правильно ли вы его сохраняли?

Вот документы, которые я нашел для pg gem: https://github.com/Casecommons/pg_search

person Helsing    schedule 16.01.2019
comment
Привет, да, я сделал эти шаги, но не смог перестроить различные модели в созданной базе данных из-за сообщения об устаревании звездочки (еще над чем я работаю), поэтому я создал новый элемент для проверки поиска, который журнал Сказанное было сохранено правильно, а детали добавлены в таблицу pg_search_documents. - person Emily; 17.01.2019