我正在使用thinking_sphinx,并且正在对模型进行增量索引。
增量索引有效,但存在小错误。当我创建一个新产品时,它是索引。但是,当我更新该产品时,它并没有立即获得索引。在索引旧的更新产品之前,我必须更新或创建新产品。
不太确定从哪里开始。
我正在使用thinking_sphinx,并且正在对模型进行增量索引。
增量索引有效,但存在小错误。当我创建一个新产品时,它是索引。但是,当我更新该产品时,它并没有立即获得索引。在索引旧的更新产品之前,我必须更新或创建新产品。
不太确定从哪里开始。
我的建议是使用delayed_delta 索引而不是直接的delta 索引(这可能会很慢,如果您在几秒钟内有一些更新,可能会导致您出现各种问题)。
它需要两个步骤:
define_index
块有一个set_property :delta => :delayed
#!/usr/bin/env 红宝石 ## 此脚本用于确保延迟作业运行 ## 被思维斯芬克斯使用 需要 File.dirname(__FILE__) + '/../config/environment' # 你也可以把 this 的定义放在 config/environments/*.rb 中,这样它在测试、生产和开发中是不同的 JobRunnerPidFile = "#{RAILS_ROOT}/tmp/pids/job_runner.pid" 如果 File.exists?(JobRunnerPidFile) old_pid = File.read(JobRunnerPidFile).to_i 开始 如果 Process.getpgid(old_pid) > 0 # 还在运行,让我们静默退出... 退出(0) 结尾 救援 # 看起来没有运行,所以让我们继续 结尾 结尾 File.open(JobRunnerPidFile, "w") {|f| f.write "#{$$}\n" } 延迟::Worker.new.start
您可以每 5 分钟从 cron 运行该脚本(它只会运行一个实例),或者如果您有监控服务(例如,monit
),您可以让它确保它正在运行。
确保在部署新版本的代码时重新启动该脚本。