Instantly share code, notes, and snippets.

Embed
What would you like to do?
Elasticsearch reindex task
# Run with: rake environment elasticsearch:reindex
namespace :elasticsearch do
desc "re-index elasticsearch"
task :reindex => :environment do
klass = Place
ENV['CLASS'] = klass.name
ENV['INDEX'] = new_index = klass.tire.index.name << '_' << Time.now.strftime('%Y%m%d%H%M%S')
Rake::Task["tire:import"].invoke
puts '[IMPORT] about to swap index'
if a = Tire::Alias.find(klass.tire.index.name)
puts "[IMPORT] aliases found: #{Tire::Alias.find(klass.tire.index.name).indices.to_ary.join(',')}. deleting."
old_indices = Tire::Alias.find(klass.tire.index.name).indices
old_indices.each do |index|
a.indices.delete index
end
a.indices.add new_index
a.save
old_indices.each do |index|
puts "[IMPORT] deleting index: #{index}"
i = Tire::Index.new(index)
i.delete if i.exists?
end
else
puts "[IMPORT] no aliases found. deleting index. creating new one and setting up alias."
klass.tire.index.delete
a = Tire::Alias.new
a.name(klass.tire.index.name)
a.index(new_index)
a.save
end
puts "[IMPORT] done. Index: '#{new_index}' created."
end
end
@phiggins

This comment has been minimized.

phiggins commented Jun 12, 2014

On line 11 you're calling Tire's tire:import rake task, but I don't think that is going to do what you want.

@felixbuenemann

This comment has been minimized.

felixbuenemann commented Sep 23, 2015

@phiggins I think it's passed through by import_model via params[:index] not index.

@felixbuenemann

This comment has been minimized.

felixbuenemann commented Sep 23, 2015

There is a bug in line 9 which mutates the current index name in place. It can be fixed by using interpolation:

ENV['INDEX'] = new_index = "#{klass.tire.index.name}_#{Time.now.strftime('%Y%m%d%H%M%S')}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment