Вопрос:

Как активно загружать связанные модели при индексации с помощью SearchKick / ElasticSearch?

ruby-on-rails-3 elasticsearch searchkick

175 просмотра

1 ответ

1947 Репутация автора

Это мой search_dataметод:

def search_data
  {
    email: email,
    skills: interests.pluck(:name)
  }
end

где мой User has_many :skills. Когда я запускаю User.where(conditions).reindexего, загружайте skillsзаписи как

SELECT * FROM skills WHERE skills.user_id = 1
SELECT * FROM skills WHERE skills.user_id = 2
SELECT * FROM skills WHERE skills.user_id = 3
SELECT * FROM skills WHERE skills.user_id = 4
. . .

Интересно, возможно ли заставить его загружаться так:

SELECT * FROM skills WHERE skills.user_id IN (1, 2, 3, 4, . . .)
Автор: Erik Escobedo Источник Размещён: 22.08.2016 09:45

Ответы (1)


2 плюса

2493 Репутация автора

Решение

Вы можете использовать энергичную нагрузку при индексации, поэтому для переиндексации вашей Userмодели вы должны написать что-то вродеUser.includes(:skills).reindex

Тогда вы должны были бы использовать mapвместо этого pluckздесь:

def search_data
  {
    email: email,
    skills: interests.map(&:name)
  }
end
Автор: sren Размещён: 23.05.2017 09:39
Вопросы из категории :
32x32