2010-01-06 56 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