我正在使用thinking_sphinx并且是delta索引模型。Rails,Thinking_sphinx,Delta Index
德尔塔指数工程,但有一个小错误。当我创建一个新产品时,它是索引。但是,当我更新该产品时,它无法立即获取索引。在旧的更新产品编入索引之前,我必须更新或创建新产品。
不太确定从哪里开始。
我正在使用thinking_sphinx并且是delta索引模型。Rails,Thinking_sphinx,Delta Index
德尔塔指数工程,但有一个小错误。当我创建一个新产品时,它是索引。但是,当我更新该产品时,它无法立即获取索引。在旧的更新产品编入索引之前,我必须更新或创建新产品。
不太确定从哪里开始。
我的建议是使用delayed_delta索引而不是直接增量索引(这可能会很慢,如果几秒钟后有几次更新,可能会导致各种问题)。
需要两个步骤:
define_index
块有set_property :delta => :delayed
#!/usr/bin/env ruby ## this script is for making sure and delayed_jobs get run ## it is used by thinking sphinx require File.dirname(__FILE__) + '/../config/environment' # you can also put the definition of this in config/environments/*.rb so it's different for test, production and development JobRunnerPidFile = "#{RAILS_ROOT}/tmp/pids/job_runner.pid" if File.exists?(JobRunnerPidFile) old_pid = File.read(JobRunnerPidFile).to_i begin if Process.getpgid(old_pid) > 0 # still running, let's exit silently... exit(0) end rescue # looks like nothing is running, so let's carry on end end File.open(JobRunnerPidFile, "w") {|f| f.write "#{$$}\n" } Delayed::Worker.new.start
您可以从cron运行该脚本每5分钟(这将只能运行一个实例),或者如果你有一个监控服务(例如,monit
),你可以把它确保它正在运行。
确保在部署新版本的代码时重新启动该脚本。
谢谢。这可能是我的问题的解决方案。 – s84 2010-01-07 06:01:11
我有时会遇到类似的问题。我很难确定发生了什么...... – Matchu 2010-01-06 14:20:31