В моем проекте рельсов у меня есть две модели:
class Student < ActiveRecord::Base
attr_accessible :name
has_many :homeworks
...
end
class Homework < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
attr_accessible :grade
belongs_to :student
...
end
Я хочу выполнить запрос на стороне эластичного поиска:
- Найдите всех учащихся с хотя бы одной оценкой "F" за домашнее задание.
- Sort students
- by count of homeworks rated 'F'
- по имени
- Пагинация студентов
Этот упрощенный пример можно решить без использования elasticsearch, однако проект, над которым я работаю, имеет функцию полнотекстового поиска, для которой требуется elasticsearch.
Я пробовал следующие подходы:
- Сохранение атрибутов родительского объекта внутри дочерних объектов и использование фасетов для группировки. Кажется, это работает, но тогда я не могу разбить свои результаты на страницы, как описано здесь: http://bit.ly/10hyYoS
- Использование вложенных документов. Мой поисковый запрос возвращает отфильтрованных студентов со всеми неотфильтрованными домашними заданиями, и я не уверен, как отфильтровать детей в результатах поиска.
Я был бы признателен за совет о том, как сопоставить эти модели с elasticsearch и эффективно выполнять запросы.
Не требуется полного решения, просто общее представление о направлении. Стоит ли использовать вложенные объекты? Хранить атрибуты ученика внутри домашнего задания и использовать фасеты для группировки?
Заранее спасибо!