Опции группы Thinking Sphinx - PullRequest
2 голосов
/ 23 января 2011

Хорошо, у меня есть 4 модели, которые я ищу в одном поиске, например,

#category model
define_index do
  indexes :name, :description, :tag
  indexes sub_categories.name, :as => :subcategory_name
end

#pattern model
define_index do
  indexes :name, :tag_name, :reference
  indexes colorways.filename, :as => :color_name
end

и т. Д. У меня также есть контроллер поиска, который вызывает их все этой командой

@results = ThinkingSphinx.search params[:search], :page => params[:page], :per_page => 25

Мне нужно сгруппировать результаты на основе модели, например, я хочу сначала получить все графические результаты, а затем категории, а затем подкатегории, так что, на мой взгляд, я могу собрать все графики вместе и категории вместе..... любые идеи о том, как лучше группировать или сортировать их по объектам ...

Ответы [ 2 ]

5 голосов
/ 24 января 2011

Есть два подхода ... во-первых, Thinking Sphinx хранит CRC-версию имени класса в качестве атрибута, поэтому вы можете попросить Sphinx отсортировать по этому номеру:

ThinkingSphinx.search params[:search],
  :page     => params[:page],
  :per_page => 25,
  :order    => 'class_crc ASC, @relevance DESC'

Однако это не приводит к определенному порядку (вы упомянули, что сначала вы хотите получить графические результаты) - поэтому вы можете рассмотреть другой подход - добавить ручной атрибут к каждому определению индекса с целым числом, определяющим порядок: *

has '1', :as => :model_order, :type => :integer

Измените значения 1 на 2, 3 и т. Д. Для каждого определения индекса в зависимости от того, где вы хотите получить его в результатах поиска. И тогда поиск выглядит так:

ThinkingSphinx.search params[:search],
  :page     => params[:page],
  :per_page => 25,
  :order    => 'model_order ASC, @relevance DESC'

Надеюсь, один из этих двух вариантов подойдет вам.

0 голосов
/ 24 января 2011

Быстрый и грязный способ - использовать group_by и имя класса модели:

@results.group_by(&:class)

Но это, вероятно, не будет работать хорошо для больших наборов результатов.Для этого вы можете рассмотреть возможность добавления имени модели в виде столбца в каждой таблице и выполнить группировку, используя ThinkingSphinx, как описано в документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...