2011-04-08 3 views
1

지연된 델타를 thinking_sphinx와 함께 사용하는 데 문제가 있습니다.사고 스핑크스 델타 인덱싱 지연 - 레코드 삭제시 색인이 업데이트되지 않음

after_save :set_events_delta_flag 
after_destroy :set_events_delta_flag 

def set_events_delta_flag 
    Event.define_indexes 
    sql = "UPDATE events SET delta = true FROM subscriptions" 
    sql << " WHERE events.id = subscriptions.event_id AND (subscriptions.id = #{self.id})" 
    Event.connection.update(sql) 
    Event.index_delta 
end 

그것은 때 확인 일 :

사용자가 추가
Event 
    has_many :subscriptions 
    has_many :users, :through => :subscriptions 
    ... 
    define_index do 
    indexes name 
    indexes users(:id), :as => :user_id 
    set_property :delta => :delayed 
    ... 

Subscription 
    belongs_to :event 
    belongs_to :user 

User 
    has_many :subscriptions 
    has_many :events, :through => :subscriptions 

/I이 같은 가입 모델 콜백을 통해 모든 해당 이벤트에 델타 플래그를 설정 구독을 제거 :이 모델입니다 사용자가 구독을 추가하면 콜백이 실행되고 ThinkingSphinx :: Deltas :: DeltaJob 작업이 실행되고 인덱스가 업데이트됩니다. 사용자가 구독 콜백과 DeltaJob 실행을 제거하지만 인덱스가 업데이트되지 않는 것 같습니다 그러나 때

내가 좋아하는 뭔가를 할 경우

Event.search("". :with => {:user_id => XX}).search_count 

전 및 후 가입을 제거하려면 개수가 변경되지 않습니다 (변경 전후에 을 추가)

이것은 예상되는 동작입니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

업데이트 : 동일한 문서 (코어 인덱스와 델타 인덱스 중 하나)의 두 사본이 문제의 원인입니다.

답변

2

스핑크스 2.0.3으로 업그레이드하면 색인 2 개가 사라집니다. 색인은 단일으로 병합됩니다. 업그레이드를 시도 할 수 있습니다.

관련 문제