我有一个应用程序,它有一个 Nutch 爬虫将结果直接发送到由轮胎持久性模型创建的 ElasticSearch 索引。
我正在寻找最好的方法来更改不需要删除索引的索引,然后重新创建它并重新填充它,因为索引是主数据源。我一直在尝试使该方法在您的索引是别名的情况下工作,然后将索引与别名关联,然后从主索引导入到新索引。
我一直在尝试获取rake environment tire:import CLASS='Applicant' INDEX='index_new'
命令以使用这种方法完成工作,但没有取得任何成功,因为它首先由于未定义的方法“分页”而在导入时失败,然后在我定义了“分页”方法之后我的模型,它从一个未定义的方法“计数”失败,它在轮胎 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
顺便说一句,但我的优先级也较低,我一直在研究代码,试图了解为什么导入需要分页,但我不清楚。
提前致谢。