2010-01-06 71 views
4

我正在使用thinking_sphinx並且是delta索引模型。Rails,Thinking_sphinx,Delta Index

德爾塔指數工程,但有一個小錯誤。當我創建一個新產品時,它是索引。但是,當我更新該產品時,它無法立即獲取索引。在舊的更新產品編入索引之前,我必須更新或創建新產品。

不太確定從哪裏開始。

+0

我有時會遇到類似的問題。我很難確定發生了什麼...... – Matchu 2010-01-06 14:20:31

回答

3

我的建議是使用delayed_delta索引而不是直接增量索引(這可能會很慢,如果幾秒鐘後有幾次更新,可能會導致各種問題)。

需要兩個步驟:

  1. 更改define_index塊有set_property :delta => :delayed
  2. 創建一個簡短的腳本,以確保延遲索引工作得到運行。下面是我使用的一個:
 
#!/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),你可以把它確保它正在運行。

確保在部署新版本的代碼時重新啓動該腳本。

+0

謝謝。這可能是我的問題的解決方案。 – s84 2010-01-07 06:01:11