我在使用thinking_sphinx延迟增量时遇到了麻烦。这是模型:
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
当用户添加/删除订阅时,我通过订阅模型回调将delta标志设置为所有相应的事件,如下所示:
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
在删除订阅之前和之后,计数不会更改(在添加订阅之前和之后更改)
这是预期的行为吗?我做错了什么?
更新:似乎Sphinx storig同一文档的两个副本(一个在核心索引中,另一个在delta索引中)是导致问题的原因。
答案 0 :(得分:2)
升级到Sphinx 2.0.3后,有2个索引的问题就会消失。指数将合并为单一。您可以尝试升级它。