Думая, что сфинкс не индексирует должным образом отношения own_to в продакшене, но отлично работает в dev

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

На моей локальной машине все работает нормально. Но, в производстве, список фильмов на странице автора пуст, и я не могу понять, почему. В производстве в консоли я тестировал следующие выражения, но безуспешно (всегда возвращает 0, а в dev возвращает значения > 0):

ruby-1.9.2-p290 :042 > Movie.search(:with => {:author_ids => [6]}).count
 => 0
 ruby-1.9.2-p290 :043 > Movie.search(:with => {:author_ids => 6}).count
 => 0 

Странно то, что я использую очень похожий код для отображения фильмов, связанных с темой, на странице темы, и он отлично работает как в разработке, так и в производстве. Например:

ruby-1.9.2-p290 :051 > Movie.search(:with => {:topic_ids => 2}, :per_page   => 1000).count
 => 295 

Вот как я определяю свой класс Movie:

class Movie < ActiveRecord::Base

  belongs_to :author
  has_many :topics
  ...

  define_index('movie') do
    ...
    has       author(:id),                :as         => :author_ids,
                                          :facet      => true

    has       topics(:id),                :as         => :topic_ids,
                                          :facet      => true

    ...
  end

  ...
end

А вот как выглядит мой контроллер авторского шоу:

def show
    @author = Author.find(params[:id])
    keywords = params[:what] || ""
    with_params[:author_ids] = [@author.id]

    @movies = Movie.search(
            keywords,
        :with => with_params
    )

end

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

ОБНОВЛЕНИЕ: по совету Пэта я обновил Sphinx, и все решилось (я обновился с 0.9.8 до 0.9.10)! Я был сбит с толку, потому что Sphinx НЕ является драгоценным камнем (хотя драгоценный камень Sphinx существует) ... Поэтому мне пришлось пройти через обычный процесс загрузки, создания, установки.


person alex    schedule 04.11.2011    source источник


Ответы (1)


Начну с очевидного, но может это уже пробовали - атрибут author_ids что-то относительно новое? Вы перестроили (индексировали и перезапуск) Sphinx после добавления этого атрибута? rake ts:rebuild это простой способ сделать это.

Обновление: оказалось, что обновление Sphinx было здесь исправлением — Алекс может подтвердить, какая версия, но я предполагаю, что 0.9.9 или лучше должны помочь.

person pat    schedule 04.11.2011
comment
Да, Пэт, об этом позаботились. Я регулярно перестраиваю свой индекс. - person alex; 04.11.2011
comment
да... мне бы тоже понравилось! Что-нибудь подозрительное в том, как я определил индекс? Как я вызываю функцию поиска (с массивом, содержащим идентификатор автора)? - person alex; 05.11.2011
comment
Синтаксис выглядит нормально. Какое значение мы ожидаем? Что такое Author.find(6).movies.count? - person pat; 05.11.2011
comment
В продакшене И в dev у меня Author.find(6).movies.count возвращает 25, но Movie.search(:with => {:author_ids => 6}, :per_page => 1000).count возвращает 0 в prod, 25 в dev (у меня одинаковые данные в обеих средах). - person alex; 05.11.2011
comment
Пэт, что-то бросилось мне в глаза: 2 файла в db/sphinx/production/ в рабочей папке моего приложения (а именно movie_core.spl и movie_delta.spl) принадлежат пользователю root, и мой пользователь веб-приложения не имеет к ним доступа. Я не уверен, что в этих файлах... Это может быть связано с моей проблемой? - person alex; 05.11.2011
comment
хм... и еще кое-что: у меня в результатах поиска фильмов есть фасеты... все фасеты работают, кроме одного Автора. - person alex; 05.11.2011