Rails,Thinking_sphinx,Delta Index

时间:2010-01-06 14:04:04

标签: ruby-on-rails thinking-sphinx

我正在使用thinking_sphinx并且是对模型进行delta索引。

增量索引有效,但存在小错误。当我创建一个新产品时,它就是索引。但是,当我更新该产品时,它没有立即获得索引。我必须在旧的更新产品编入索引之前更新或创建新产品。

不太确定从哪里开始。

1 个答案:

答案 0 :(得分:3)

我的建议是使用delayed_delta索引而不是直接增量索引(这可能很慢,如果你在几秒内有一些更新,可能会导致各种问题)。

这需要两个步骤:

  1. define_index块更改为set_property :delta => :delayed
  2. 创建一个简短的脚本以确保延迟的索引作业运行。这是我使用的那个:
  3. #!/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
    

    您可以每隔5分钟从cron运行该脚本(它只运行一个实例),或者如果您有监控服务(例如,monit),您可以确保它正在运行。

    确保在部署新版本的代码时重新启动该脚本。