Как искать дерево с помощью sunspot & solr
-
28-10-2019 - |
Вопрос
У меня есть модель, которая выглядит примерно так
class Post
acts_as_tree
end
Что я хочу сделать, так это выполнить поиск по содержимому всего потока сообщений, но возвращать только родительское сообщение в результатах и разбивать эти результаты на страницы.
Я читал о гранях в sunspot / solr, и хотя это возвращает правильные результаты, они не могут быть разбиты на страницы.
По сути, я хочу выполнить поиск по набору сообщений, но сгруппировать по их parent_id
.Возможно ли это в sunspot / solr?
Решение
По сути, вы хотите выполнить поиск по полю, состоящему из всех дочерних узлов потока.Вы можете сделать это с помощью блочного синтаксиса sunspot.Если post является корневым узлом, проиндексируйте все дочерние узлы узла (вам придется реализовать all_children, что не должно быть слишком сложно).
searchable do
text :posts do
all_children.map(&:post_body) unless parent
end
end
Затем выполните поиск по этому текстовому полю "сообщения".Поскольку вы проиндексировали что-либо только для корневых узлов, это единственные объекты, которые будут возвращены в вашем результирующем наборе.