У меня есть модель канала с двумя ассоциациями: «содержание» и «подписки».
В индексе каналов пользователь имеет возможность упорядочить каналы по количеству подписок или количеству одобренного контента.
В то время как в процессе разработки кажется, что все работает должным образом (при наблюдении за результатами могут возникать неисправности и может быть недостаточно данных для правильного просмотра), при постановке результаты являются случайными, иногда они отображаются правильно, а иногда - нет.
Сначала я не использовал дельта-индексы и думал, что проблема может быть там, поэтому каждый раз, когда я утверждаю контент, я вызываю:
Delayed::Job.enqueue(DelayedRake.new("ts:index"), queue: "sphinx")
Поскольку у подписок нет индексов, я не переиндексирую каждый раз, когда создаю один (должен ли я это делать?)
Затем я начал использовать дельта-индексы в канале, и у меня все те же проблемы:
ThinkingSphinx::Index.define :channel, with: :active_record, delta: true do
# fields
indexes :name, sortable: true
indexes description
# attributes
has created_at, sortable: true
has approved, type: :boolean
has public, type: :boolean
join subscriptions
has "COUNT(subscriptions.id)", as: :subscription_count, type: :integer, sortable: true
join contents.approved
has "COUNT(contents.id)", as: :content_count, type: :integer, sortable: true
end
А вот и поисковый вызов в контроллере:
def index
if params[:order_by].present?
@channels = Channel.search params[:search],
order: "#{params[:order_by]} DESC",
page: params[:page], per_page: 6
else
@channels = Channel.search params[:search],
order: :name,
page: params[:page], per_page: 6
end
end
Подводя итог, у меня будут следующие вопросы: 1. Правильно ли сформированы индексы моих каналов? 2. Должны ли подписки также индексироваться или достаточно, чтобы присоединиться к ним в моем индексе каналов? 3. Должен ли я запускать переиндексирование после создания подписки / утверждения контента или дельта-индекс в канале имеет дело с этим, поскольку у меня эти два контроллера объединены в индексе канала?