Мышление Sphinx с Rails - Delta-индексация работает нормально для одной модели, но не для другой - PullRequest
0 голосов
/ 09 апреля 2010

У меня 2 модели пользователя и обсуждения. Я определил индексы для моделей следующим образом:
Для модели User:

define_index do
indexes email
indexes first_name
indexes last_name, :sortable => true
indexes groups(:name), :as => :group_names
has "IF(email_confirmed = true and status = 'approved', true, false)", :as => :approved_user, :type => :boolean
has "IF(email_confirmed = true and (status = 'approved' or status='blocked'), true, false)", :as => :approved_or_blocked_user, :type => :boolean
has points, :type => :integer
has created_at, :type => :datetime
has user(:id)
set_property :delta => true
end

Для модели обсуждения:

define_index do
indexes title
indexes description
indexes category(:title), :as => :category_title
indexes tags(:title), :as => :tag_title
has "IF(publish_to_blog = true AND sticky = false, true, false)", :as => :publish_to_main, :type => :boolean
has created_at
has updated_at, :type => :datetime
has recent_activity_at, :type => :datetime
has views_count, :type => :integer
has featured
has publish_to_blog
has sticky
set_property :delta => true
end

Я добавил дельта-столбец в обе таблицы в соответствии с документацией. Моя проблема в том, что дельта-индексирование работает только для модели обсуждения, а не для модели пользователя. Например: когда я обновляю «заголовок» обсуждения, я вижу, что думающий сфинкс вращает индексы и т. Д. (Как видно из журналов). Но когда я обновляю 'first_name' или 'last_name' пользователя, ничего не происходит.

Модель User также имеет has_many: через ассоциацию через модель, называемую GroupsUser. Я настроил after_save в GroupsUser следующим образом:

def set_user_delta_flag
user.delta = true
user.save
end

Даже это, похоже, не вызывает дельта-индексации в модели User. Аналогичная настройка для модели обсуждения работает отлично! Может кто-нибудь сказать мне, почему это происходит?

1 Ответ

0 голосов
/ 10 апреля 2010

Хорошо, я понял это. Проблема была с определением атрибута:

has user(:id)

Когда я удалил его из определения и запустил перестройку, казалось, все работало идеально.

...