【问题标题】:Dealing with ThinkingSphinx realtime indices when destroying records销毁记录时处理 ThinkingSphinx 实时索引
【发布时间】:2017-07-04 15:02:58
【问题描述】:

我正在尝试将 ThinkingSphinx 中基于增量的索引转换为实时索引。根据文档,我添加了这个回调:

after_save ThinkingSphinx::RealTime.callback_for(:location)

这很适合添加和更新记录,哇。我的问题是删除记录,根据 Rails 文档,不要触发 after_save 回调。我已通过删除一条记录确认了这一点,该记录并未从我的 sphinx 索引中删除。

我试过了

after_destroy ThinkingSphinx::RealTime.callback_for(:location)

但这会引发错误(因为实时回调不支持after_destroy)。

使用实时索引时如何从索引中删除条目?

thinking-sphinx 3.3.0rails 5.0.4,如果有帮助的话)

【问题讨论】:

    标签: ruby-on-rails thinking-sphinx


    【解决方案1】:

    Thinking Sphinx 会自动将自己的 after_destroy 回调添加到所有索引模型,因此无需添加任何代码即可从实时索引中删除这些记录。

    【讨论】:

    • 感谢 Pat(很高兴看到您监控此标签)。 after_save 回调是必要的,还是自动添加的?
    • after_save 不会自动调用,因此您肯定需要将其保留在代码中。也许如果我有时间的话,after_destroy 也不会(采取更明确的路线,而不是更鲁莽地入侵应用程序的代码)。
    • 看起来文档没有我可以反对的回购,但即使是文档中的注释也会有很长的路要走。当我进行销毁时,我的开发日志明显没有显示 Sphinx 查询。
    • 刚刚在文档中添加了一条注释(位于 repo 的 gh-pages 分支中 - 并不完全明显,我很清楚)。此外,添加了一个提交,以便这些对 Sphinx 的删除语句显示在 Rails 日志中:github.com/pat/thinking-sphinx/commit/…
    • 谢谢你,帕特!
    【解决方案2】:

    如果您仍需要手动执行此操作,例如软删除对象时。

    ThinkingSphinx::ActiveRecord::Callbacks::DeleteCallbacks.after_destroy(instance)
    

    参考:https://github.com/pat/thinking-sphinx/issues/1057

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多