Как выполнить поиск по нескольким таблицам (моделям) с помощью Sunspot Solr? - PullRequest
2 голосов
/ 13 декабря 2011

Я хочу, чтобы пользователи могли использовать одно поле поиска для поиска различных объектов.Я бы выделил их на странице результатов.И то, и другое будет полнотекстовым поиском.

Должен ли я создать контроллер поиска и загрузить все в действие index с помощью чего-то вроде:

@posts = Post.all
@groups = Group.all

Что-то подсказывает мне, что это будет фантастически неэффективно.

Я не совсем уверен, с чего начать, мне не удалось найти что-либо, касающееся этого вопроса, на страницах сети, но если я что-то пропустил, дайте мне знать.

Спасибо

РЕДАКТИРОВАТЬ: вот моя панель поиска, доступная глобально на моем веб-сайте:

    -form_tag posts_path, :method => :get do
     =text_field_tag :search, params[:search], :id => 'searchfield'
     =submit_tag '',:name => nil, :id => 'searchbutton'

она только ищет модель "Post" прямо сейчас и отображает результаты в представлении индекса Post #

Я хочу, чтобы запросы, введенные в поле поиска, находились в таблицах записей и групп, а результаты отображались в двух отдельных столбцах на одной странице.возможно через поисковый контроллер / просмотр

Ответы [ 3 ]

6 голосов
/ 27 сентября 2013

Если вы хотите искать оба типа одновременно, вы можете использовать эту форму:

# Pass your models in by class constant
Sunspot.search(Post,Group) do |s| 
    s.fulltext(params[:search])
end

Это задокументировано в вики: https://github.com/sunspot/sunspot/wiki/Working-with-search#initiating-a-search

3 голосов
/ 13 декабря 2011

Добавьте директиву поиска от sunspot solr к вашим моделям для индексации. Например:

class Post < ActiveRecord::Base
  searchable do
    text :title, :body
  end
end

class Group < ActiveRecord::Base
  searchable do
    text :name
  end
end

Если у вас есть данные в БД, обязательно запустите rake sunspot:solr:reindex для индексации. Для новых данных индексирование будет выполнено в хуке.

Теперь вы можете искать:

@posts = Post.search {fulltext params[:search]}
@groups = Group.search {fulltext params[:search]}

Теперь у вас есть данные для ваших двух столбцов.

0 голосов
/ 26 марта 2013

Это не ответ, но я нашел что-то полезное. Это драгоценный камень, который поможет вам искать по нескольким таблицам:

https://github.com/toptierlabs/acts_as_fulltextable.

Помогает хранить все доступные для поиска данные (из разных моделей) в одном месте.

...