2014-09-03 5 views
0

조인 (가운데) 테이블에 열이 있습니다.생각하는 스핑크스 정렬 순서가 예상대로 작동하지 않습니다.

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

그것의 나에게 기록을 포기하지 않을 그것이 있어야로 : 나는 위치

여기

처럼 쿼리 않는 경우

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 

내 인덱스 파일입니다 열을 검색 할.

정확한 결과를 얻으려면 무엇을해야하는지 조언하십시오.

답변

1

여기에 유의해야 할 점이 몇 가지 있습니다.

첫째 : (restaurant_schools은 복수의 이름이 제안하는 has_many 또는 has_and_belongs_to_many 협회 인 경우) restaurant_position 필드는 많은 값의 모음입니다. 이것은 실제로 함께 연결된 값의 문자열이된다는 것을 의미합니다 (공백 문자를 구분자로 사용). 예 : "1 4 7 2"

둘째 : 속성으로 변경 한 경우에도 다중 값 속성입니다. 다중 값 속성에 대한 정렬은 의미가 없습니다 (모든 값의 평균을 사용하면 가장 작은가? 가장 큰가? 합계?).

마지막으로, 아마도 정렬 논리에 연결하기 위해 (school_id에) 제공하는 필터를 원하십니까? 스핑크스는 관계형 데이터베이스가 아니며 해시/사전에 대한 개념도 없으므로 각 restaurant_position 값과 데이터베이스에 연결될 수있는 해당 학교간에 연결이 없습니다.

당신이 해당 연결을하고자 할 경우, 그것은 하나 개의 학교와 하나 개의 위치를 ​​(내가 그 RestaurantSchool을 같은데요)이 모델에 스핑크스 지수를하는 것이 가장 좋습니다. 거기에서 관련 필드와 속성을 연관을 통해 가져올 수 있지만 다음과 같은 방법으로 검색/정렬 할 수도 있습니다.

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

학교와 식당간에 has_many 연관성이 있습니다. 학교 이름이 주어지면 검색하고 싶습니다. 위치에 따라 정렬 된 식당을 가져와야합니다 (중간 테이블 필드) – Baran

+1

바로, RestaurantSchool에서 검색을 제안하면 올바른 접근 방식처럼 들리 네요. – pat

관련 문제