2

行,所以我有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 

我需要组的成果基础上,模型,例如,我希望所有的图形结果第一则的类别,然后在子类在一起,因此在我看来,我可以拥有所有的图形一起和类别在一起.....关于按对象分组或排序的最佳方式的任何想法...

回答

5

有两种方法...首先,思考狮身人面像存储类名的CRC'd版本的属性,所以你可以要求狮身人面像由排序:

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

嘿帕特有'1',:as =>:model_order,:type =>:整数 去每个模型和1将在图形模型 – Trace 2011-01-24 01:31:11

0

一个快速和肮脏的方法是使用group_by和模型类名:

@results.group_by(&:class)

但它可能不会对大的结果集工作。为此,您可以考虑在每个表格中添加模型名称作为列,然后按照in the docs所述的方法使用ThinkingSphinx进行分组。