我有一个 Ruby on rails 3.2 应用程序,我正在尝试使用轮胎和弹性搜索。
我有一个具有以下声明的用户模型:
include Tire::Model::Search
include Tire::Model::Callbacks
然后,我通过调用将记录初始导入 Elastic Search:
rake environment tire:import CLASS=User FORCE=true
是否可以自定义导入任务,使其跳过一个用户?我有一个不想被索引的系统用户?
我有一个 Ruby on rails 3.2 应用程序,我正在尝试使用轮胎和弹性搜索。
我有一个具有以下声明的用户模型:
include Tire::Model::Search
include Tire::Model::Callbacks
然后,我通过调用将记录初始导入 Elastic Search:
rake environment tire:import CLASS=User FORCE=true
是否可以自定义导入任务,使其跳过一个用户?我有一个不想被索引的系统用户?
首先,Rake 任务只是最常见情况下的一种便捷方法,例如在尝试 elasticsearch/Tire out 等时。对于更复杂的情况,您应该编写自己的索引代码——应该很容易。
其次,如果你对记录是否被索引有一定的条件,你应该按照自述文件的指示去做:不要include Tire::Model::Callbacks自己管理索引生命周期,例如:
after_save do
update_index if state == 'published'
end
我找到了一个粗略的解决我的问题的方法,并想发回一些东西,以防万一其他人遇到这个问题。如果有人有更好的建议,请告诉我。
最后我写了一个轮胎任务,调用常规的全部导入,然后从索引中删除系统帐户。
namespace :tire do
desc 'Create search index on User'
task :index_users => :environment do
ENV['CLASS'] = 'User'
ENV['FORCE'] = 'TRUE'
Rake::Task['tire:import'].invoke
@user = User.find_by_type('System')
User.tire.index.remove @user
end
end