2014-09-03 67 views
0

我在連接(中)表中有一列。我想在那列,它是位置思維獅身人面像排序順序無法按預期工作。

這裏是我的索引文件

ThinkingSphinx::Index.define :restaurant, :with => :active_record, :delta => ThinkingSphinx::Deltas::DelayedDelta do 

    indexes schools.school_name, :sortable => true, :as => :school_name 
    indexes schools.branch_name, :sortable => true, :as => :branch_name 
    indexes contact_info.restaurant_name, :sortable => true, :as => :restaurant_name 
    indexes delivery_info.delivery_charges, :as => :delivery_charges 

    indexes restaurant_schools.position, :as => :restaurant_position, :sortable => true 

    has restaurant_info.is_pick_up, :as => :pick_up, :facet => true 
    has delivery_info.is_delivery, :as => :delivery, :facet => true 
    has schools.id, :as => :school_id, :facet => true 

    has restaurant_categories.id, :as => :restaurant_category_ids, :facet => true 
    has restaurant_info.min_order, :as => :min_order, :type => :float 

    has avg_rating, :as => :rating, :type => :integer 
    has ranking, :as => :ranking, :type => :integer 

    has delivery_info.delivery_estimated_time, :as => :delivery_eta, :type => :integer 

    set_property :min_infix_len => 1 
end 

當我做查詢,例如搜索:

@restaurants = Restaurant.search :with => {:school_id => school_ids } 
@restaurants = @restaurants.search :order => :restaurant_position 

它不是給我的記錄也應該如此。

請指教我應該怎樣修復以獲得準確的結果。

回答

1

有幾件事要注意。

首先:您的restaurant_position字段是許多值的集合(如果restaurant_schoolshas_manyhas_and_belongs_to_many關聯,則複數名稱暗示)。這意味着它實際上最終是連接在一起的一串值(以空格字符作爲分隔符)。例如「1 4 7 2」

其次:即使您將其更改爲屬性,它也將是一個多值屬性。對多值屬性排序沒有意義(應該使用所有值的平均值?最小?最大?總和?)。

最後:也許你希望你提供的過濾器(在school_id)鏈接到排序邏輯? Sphinx不是一個關係數據庫,也沒有任何關於散列/字典的概念,所以每個restaurant_position值與它們可能在數據庫中關聯的相應學校之間沒有關係。

如果你想要的連接,那麼最好有一個學校和一個位置的模型(我猜這是RestaurantSchool)的獅身人面像索引。從那裏,你可以通過關聯拉入相關的領域和屬性,但你也可以搜索/排序這樣的事情:

RestaurantSchool.search :with => {:school_id => school_ids}, :order => :position 
+0

我有has_many通過協會,學校和餐館之間。我想搜索是否給出了學校名稱我需要按位置排列他們的餐廳(中間表字段) – Baran 2014-09-04 07:16:31

+1

對,所以我在RestaurantSchool上搜索的建議聽起來像是正確的方法。 – pat 2014-09-04 07:41:08

相關問題