我正在使用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