我有一个应用程序,它有一个Nutch抓取工具将结果直接发送到由轮胎持久性模型创建的ElasticSearch索引。
我正在寻找对不需要删除索引的索引进行更改的最佳方法,然后重新创建它并在索引是主数据源时重新填充它。我一直在努力让方法在索引是别名的地方工作,然后让索引与别名相关联,然后从主索引导入到新索引。
我一直试图通过这种方法获得rake environment tire:import CLASS='Applicant' INDEX='index_new'
命令来完成工作,但由于未定义的方法'paginate'而导致导入失败,因此没有取得任何成功我在我的模型中定义了一个'paginate'方法,它从未定义的方法'count'失败,它在轮胎-0.60.0 / lib / tire / model / import.rb:102中命中。
我一直在寻找正确的方法,但我现在还不相信我现在正走在正确的道路上。我已将我的模型包含在下面以供参考。我使用WillPaginate进行分页。
class Applicant
include Tire::Model::Persistence
include Tire::Model::Search
include Tire::Model::Callbacks
require 'will_paginate'
require 'will_paginate-bootstrap'
require 'will_paginate/array'
index_name 'index'
document_type 'doc'
mapping
indexes :boost, type: 'string'
indexes :content, type: 'string'
indexes :digest, type: 'string'
indexes :id, type: 'string'
indexes :skill, type: 'string'
indexes :title, type: 'string'
indexes :tstamp, type: 'date', format: 'dateOptionalTime'
indexes :url, type: 'string'
indexes :domain, type 'string'
property :boost
property :content
property :digest
property :id
property :skill
property :title
property :tstamp
property :url
property :domain
def self.search(params)
tire.search(page: params[:page], per_page: 20)do
query { string params[:query], default_operator: "AND" } if params[:query].present?
filter :term, domain: params[:domain_selected] if params[:domain_selected].present?
filter :term, skill: params[:skill_selected] if params[:skill_selected].present?
facet "domains" do
terms :domain
end
facet "skills" do
terms :skill
end
end
end
def self.paginate(params)
@page_results = WillPaginate::Collection.create(params[:page], per_page, total_entries) do |pager|
pager.replace(@self.to_array)
end
@page_results = @self.paginate(params[:current_page], params[:per_page])
end
end
在旁注而且优先级较低的情况下,我一直在挖掘代码,试图理解为什么导入需要分页,而且我不清楚。
提前致谢。
答案 0 :(得分:0)
嗯,你得到这个错误的原因是,在你看来,我猜,你指的是paginate gem。
要做的第一件事就是检查你的视图,从视图和控制器中剥离paginate,或者,如果你需要paginate,做这个简单的测试:
您的应用程序应该加载will_paginate gem。看看是否 已加载库,打开您的应用程序的控制台并尝试 以下几行:
定义? WillPaginate ActiveRecord的:: Base.respond_to? :paginate如果这些行中的任何一行返回nil / false,则will_paginate未在您的应用中正确加载。
((来自https://github.com/mislav/will_paginate/wiki/Troubleshooting))
如果失败,请确保Gemfile中有以下两行:
gem 'will_paginate', '~> 3.0.3'
gem 'bootstrap-will_paginate', '~> 0.0.6'
如果这对你不起作用,请告诉我,我们会深入挖掘。
答案 1 :(得分:0)
经过2周的搜索,我找到了我正在寻找的解决方案。我基本上使用Article.create_elasticsearch_index
后跟Tire.index('original-index-name').reindex 'new-index-name'
来完成我想要的结果。 Karmi的推文就是让我找到正确解决方案的原因。
https://twitter.com/karmiq/status/185811361069142016
我也正在努力使jarosan的工作适应我的工作,并将很快发布。
https://gist.github.com/3124884
感谢Michel和Karel。