Delayed Deltas for Thinking Sphinx (with Resque)
This code is HEAVILY borrowed from ts-delayed-delta.
Installation
This gem depends on the following gems: thinking-sphinx, resque, and resque-lock-timeout.
gem install ts-resque-delta
Add ts-resque-delta to your Gemfile file, with the rest of your gem dependencies:
gem 'ts-resque-delta', '~> 2.1'
If you're using Rails 3, the rake tasks will automatically be loaded by Rails. If you're using Rails 2, add the following line to your Rakefile:
require 'thinking_sphinx/deltas/resque_delta/tasks'
Add the delta property to each define_index
block:
define_index do
# ...
set_property :delta => ThinkingSphinx::Deltas::ResqueDelta
end
If you've never used delta indexes before, you'll want to add the boolean
column named :delta
to each model's table (note, you must set the :default
value to true
):
def self.up
add_column :foos, :delta, :boolean, :default => true, :null => false
end
Also, I highly recommend adding a MySQL index to the table of any model using
delta indexes. The Sphinx indexer uses WHERE table.delta = 1
whenever the
delta indexer runs and ... = 0
whenever the normal indexer runs. Having the
MySQL index on the delta column will generally be a win:
def self.up
# ...
add_index :foos, :delta
end
Usage
Once you've got it all set up, all you need to do is make sure that the Resque
worker is running. You can do this by specifying the :ts_delta
queue when
running Resque:
QUEUE=ts_delta,other_queues rake resque:work
Contributors (for ts-resque-delta)
- Aaron Gibralter
- Ryan Schlesinger (Locking/
smart_index
) - Pat Allan (FlyingSphinx support)
- James Richard
Original Contributors (for ts-delayed-delta)
- Pat Allan
- Ryan Schlesinger (Allowing installs as a plugin)
- Maximilian Schulz (Ensuring compatibility with Bundler)
- Edgars Beigarts (Adding intelligent description for tasks)
- Alexander Simonov (Explicit table definition)
Copyright
Copyright (c) 2011 Aaron Gibralter, and released under an MIT Licence.