Вопрос

У меня есть модель, которая выглядит примерно так

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

Затем выполните поиск по этому текстовому полю "сообщения".Поскольку вы проиндексировали что-либо только для корневых узлов, это единственные объекты, которые будут возвращены в вашем результирующем наборе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top