elasticsearch,tire,Ruby On Rails,elasticsearch,Tire" /> elasticsearch,tire,Ruby On Rails,elasticsearch,Tire" />

Ruby on rails Rails轮胎:使用自定义逻辑导入

Ruby on rails Rails轮胎:使用自定义逻辑导入,ruby-on-rails,elasticsearch,tire,Ruby On Rails,elasticsearch,Tire,我有一个RubyonRails3.2应用程序,我尝试使用Tire和Elastic搜索 我有一个具有以下声明的用户模型: include Tire::Model::Search include Tire::Model::Callbacks 然后,我通过调用以下命令将记录初始导入到弹性搜索中: rake environment tire:import CLASS=User FORCE=true 是否可以自定义导入任务,从而跳过一个用户?我有一个系统用户,我不想被编入索引?我找到了一个解决问题的粗

我有一个RubyonRails3.2应用程序,我尝试使用Tire和Elastic搜索

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

include Tire::Model::Search
include Tire::Model::Callbacks
然后,我通过调用以下命令将记录初始导入到弹性搜索中:

rake environment tire:import CLASS=User FORCE=true

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

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

最后,我编写了一个tire任务,调用常规import all,然后从索引中删除系统帐户

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

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

最后,我编写了一个tire任务,调用常规import all,然后从索引中删除系统帐户

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

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

其次,如果您对记录是否编制索引有一定的条件,您应该按照自述文件的指示执行:不要
包括Tire::Model::Callbacks
并自己管理索引生命周期,例如:

after_save do
  update_index if state == 'published'
end

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

其次,如果您对记录是否编制索引有一定的条件,您应该按照自述文件的指示执行:不要
包括Tire::Model::Callbacks
并自己管理索引生命周期,例如:

after_save do
  update_index if state == 'published'
end

这不是两个独立的步骤吗?rake任务用于初始加载,当您将现有数据导入Elasticsearch时,然后回调用于更新或删除这些记录时。我的答案和你的答案的组合似乎会正确地将一个项目从索引中排除。是的,正确——但在像这样的特殊情况下,最好是投入时间来微调你的自定义索引机制,例如。谢谢,我很高兴我现在更好地理解了这一点。我将把这两个部分都放进去,以解决我的初始负载问题,并防止任何正在进行的更新或新系统用户引起问题。这不是两个单独的步骤吗?rake任务用于初始加载,当您将现有数据导入Elasticsearch时,然后回调用于更新或删除这些记录时。我的答案和你的答案的组合似乎会正确地将一个项目从索引中排除。是的,正确——但在像这样的特殊情况下,最好是投入时间来微调你的自定义索引机制,例如。谢谢,我很高兴我现在更好地理解了这一点。我将把这两个部分都放进去,以解决我的初始加载问题,并防止任何正在进行的更新或新系统用户引起问题。