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進行分組。