2011-04-08 54 views
1

我有遇到麻烦与思维幻灯片延迟增量。这是模型:思考狮身人面像延迟三角洲索引 - 索引没有更新记录删除

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 

当用户添加/删除订阅我通过这样的订阅模式回调三角形标志设置为所有相应的事件:

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 

它工作正常时,用户添加订阅:回调运行,然后运行ThinkingSphinx :: Deltas :: DeltaJob作业并更新索引。然而,当用户删除订阅回调和DeltaJob运行,但似乎该指数没有更新:

如果我做这样的事情:前

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

和删除订阅后,计数没有变化(它在之前和之后改变了订阅

这是一个预期的行为?我究竟做错了什么?

更新:似乎斯芬克斯storig同一文件的两个副本(一个在核心索引和一个在三角洲索引)是问题的原因。

回答

2

随着升级到Sphinx 2.0.3,有两个索引的这个问题将消失。指数将被合并为单一指数。你可以尝试升级它。

相关问题