Индексация солнечных пятен и поиск по тегам возвращает все

Я использую act_as_taggable_on для пометки в наших проектах, а также sunspot/solr для поиска.

Получаем странный неожиданный результат. Сначала наша установка (короткая версия):

Модель:

Class Person
  has_many :projects

  searchable do
    string :project_tags, :multiple => true do
      projects.map { |p| p.tag_list}.flatten
    end
  end

Taglist — это метод из act_as_taggable_on, который возвращает массив тегов для каждого проекта (например, ["foo", "bar"]). Мы индексируем теги проекта для участников проекта.

Когда в нашем контроллере мы делаем:

Person.search() do
   with(:project_tags).any_of(params[:tags])
end

Это возвращает нужных людей. Все идет нормально.

Проблема
Нам нужна возможность поиска по нескольким тегам. Итак, в соответствии с инструкциями по солнечным пятнам, мы передаем массив. Код выглядит примерно так:

@tags_array= params[:tags].split(/ /)
Person.search() do
   with(:project_tags).any_of(@tags_array)
end

Теперь Sunspot в результате дает нам каждого человека, независимо от того, какие теги мы используем! Мы как сумасшедшие тестировали это в консоли, но не можем понять, где мы ошибаемся.

Будем признательны за любую помощь!
Эрвин


person ErwinM    schedule 20.02.2011    source источник


Ответы (1)


Хорошо, мы «решили» это сами, и я сообщу об этом здесь, если кто-то придет с тем же вопросом.

Почему-то Sunspot не любит @tags_array в нашем поисковом объявлении, после некоторого тестирования любая @variable не будет работать. Как только мы изменили его на:

tags_array= params[:tags].split(/ /)
Person.search() do
   with(:project_tags).any_of(tags_array)
end

это сработало.

С уважением,
Эрвин

person ErwinM    schedule 21.02.2011
comment
Спасибо, это помогло мне. Чтобы узнать больше о том, почему это так, будущих пользователей может заинтересовать groups.google.com/forum/?fromgroups#!topic/ruby-sunspot/ - person Anthony Panozzo; 24.07.2012
comment
Для меня мне пришлось добавить ссылки, например, строка: задачи, ссылки: задача, несколько: true do - person Brian; 05.02.2014