我的 Rails 3 中有一个名为 Article 的模型,我用rake environment tire:import CLASS='Article' FORCE=true
它来做索引。但我只希望将字段deleted
等于 false 的文章编入索引。我该如何实施?
问问题
800 次
3 回答
2
您可以使用作用域方法。
rake environment tire:import CLASS='Article.scoped(:conditions => {:deleted => false})' FORCE=true
于 2013-01-23T13:39:54.450 回答
1
以上解决方案似乎不起作用。
我们传递给CLASS
环境变量的内容仅用于查找轮胎指数和计算total
进度条。检查Line 97: total = klass.count rescue nil
并Line 49: klass.tire.import(params) do |documents|
从https://github.com/karmi/retire/blob/master/lib/tire/tasks.rb
我找到的唯一可行的解决方案(使用 mongoid)是,
Tire.index "articles" do
import Article.scoped(:conditions => {:deleted => false})
end
这就像Article.index.import( Article.scoped(:conditions => {:deleted => false}))
karmi @ https://github.com/karmi/tire/issues/458回答的一样好
但是使用上述方法的优点是当我们需要自定义映射时。像下面
Tire.index "articles" do
import Article.scoped(:conditions => {:deleted => false}) do|documents|
documents.map{|document| document[:content].downcase!; document}
end
end
于 2013-11-15T10:49:42.280 回答
0
在最新的轮胎宝石中,这对我不起作用。它在轮胎 v0.5.4 中确实有效,但在 v0.6.2 中无效。所以,为了创建一个 rake 任务,我这样做了......
desc 'Index articles'
task :index => :environment do
Article.where(:deleted => false).find_in_batches do |batch|
Tire.index(Article.index_name).import batch
end
end
自述文件中推荐使用 find_in_batches 。
于 2014-04-02T17:18:43.513 回答