1

我有一个 Ruby on rails 3.2 应用程序,我正在尝试使用轮胎和弹性搜索。

我有一个具有以下声明的用户模型:

include Tire::Model::Search
include Tire::Model::Callbacks

然后,我通过调用将记录初始导入 Elastic Search:

rake environment tire:import CLASS=User FORCE=true

是否可以自定义导入任务,使其跳过一个用户?我有一个不想被索引的系统用户?

4

2 回答 2

3

首先,Rake 任务只是最常见情况下的一种便捷方法,例如在尝试 elasticsearch/Tire out 等时。对于更复杂的情况,您应该编写自己的索引代码——应该很容易。

其次,如果你对记录是否被索引有一定的条件,你应该按照自述文件的指示去做:不要include Tire::Model::Callbacks自己管理索引生命周期,例如:

after_save do
  update_index if state == 'published'
end
于 2012-11-14T08:20:06.923 回答
1

我找到了一个粗略的解决我的问题的方法,并想发回一些东西,以防万一其他人遇到这个问题。如果有人有更好的建议,请告诉我。

最后我写了一个轮胎任务,调用常规的全部导入,然后从索引中删除系统帐户。

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
于 2012-11-13T23:15:09.157 回答