思考Sphinx团队的选择

Mat*_*iby 2 ruby group-by ruby-on-rails thinking-sphinx ruby-on-rails-3

好吧,我有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
Run Code Online (Sandbox Code Playgroud)

等等....我还有一个搜索控制器,通过这个命令调用它们

@results = ThinkingSphinx.search params[:search], :page => params[:page], :per_page => 25
Run Code Online (Sandbox Code Playgroud)

我需要根据模型对结果进行分组,例如我希望所有的图形结果首先是类别,然后是子类别,所以在我的视图中我可以将所有图形放在一起并将类别放在一起.....任何想法关于通过对象对这些进行分组或排序的最佳方法

pat*_*pat 5

有两种方法......首先,Thinking Sphinx将类名称的CRC版本存储为属性,因此您可以要求Sphinx对其进行排序:

ThinkingSphinx.search params[:search],
  :page     => params[:page],
  :per_page => 25,
  :order    => 'class_crc ASC, @relevance DESC'
Run Code Online (Sandbox Code Playgroud)

但是,这并不强制执行特定的顺序(您提到了首先想要图形结果) - 因此您可能需要考虑不同的方法 - 使用确定顺序的整数为每个索引定义添加手动属性:

has '1', :as => :model_order, :type => :integer
Run Code Online (Sandbox Code Playgroud)

根据搜索结果中的所需位置,为每个索引定义更改1到2,3等.然后搜索看起来像这样:

ThinkingSphinx.search params[:search],
  :page     => params[:page],
  :per_page => 25,
  :order    => 'model_order ASC, @relevance DESC'
Run Code Online (Sandbox Code Playgroud)

希望这两个选项中的一个适合你所追求的.