지연된 델타를 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
전 및 후 가입을 제거하려면 개수가 변경되지 않습니다 (변경 전후에 에을 추가)
이것은 예상되는 동작입니까? 내가 도대체 뭘 잘못하고있는 겁니까?
업데이트 : 동일한 문서 (코어 인덱스와 델타 인덱스 중 하나)의 두 사본이 문제의 원인입니다.