【问题标题】:Thinking Sphinx delayed delta indexing - index not updated on record deletionThinking Sphinx 延迟增量索引 - 删除记录时未更新索引
【发布时间】:2012-03-17 19:13:34
【问题描述】:

我在使用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 存储了同一文档的两个副本(一个在核心索引中,一个在增量索引中)是问题的原因。

【问题讨论】:

    标签: ruby-on-rails delayed-job thinking-sphinx


    【解决方案1】:

    升级到 Sphinx 2.0.3 后,这个有 2 个索引的问题将消失。索引将合并为单个索引。您可以尝试升级它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多