Индекс Sunspot и поисковые теги возвращают все - PullRequest
10 голосов
/ 21 февраля 2011

Я использую 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, который возвращает массив тегов для каждого проекта (fe ["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 дает нам каждого человека в результате, независимо от того, какие теги мы используем!Мы тестировали это в консоли, как сумасшедший, но не можем понять, в чем дело.

Любая помощь будет принята!
Эрвин

1 Ответ

8 голосов
/ 21 февраля 2011

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

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

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

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

Приветствия
Эрвин

...