Elasticsearch&Tiregemを使用して多数のドキュメントのインデックスを作成しようとしています。レコードが完全ではなく、参照されていないまれな場合を除いて、インデックス作成はうまく機能していますfilename
。そのような場合、レコードには何もインデックスが付けられず、Elasticsearchは。をスローしNullPointerException
ます。
私はJavaを知りませんが、Elasticsearchがレコードの残りの部分を正常にインデックス付けし、whereリターンをバイパスするように、Attachment Typeプラグインに何かを渡す方法があるかどうか疑問に思っていますか?:type => 'attachment'
attachment
null
試してみ"attachment" : {"type" : "attachment", "null_value" : "missing_file"}
ました(またはタイヤの用語では:)indexes :attachment, :type => 'attachment', :null_value => "missing_file"
が、これは何の違いもないようです。
#app/models/article.rb
class Article < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
attr_accessible :title, :content, :published_on, :filename
mapping do
indexes :id, :type =>'integer'
indexes :title
indexes :content
indexes :published_on, :type => 'date'
indexes :attachment, :type => 'attachment', :null_value => 'missing_file' # <== no worky
end
def to_indexed_json
to_json(:methods => [:attachment])
end
def attachment
if filename.present?
path_to_pdf = "/Volumes/HardDisk/sample_pdfs/#{filename}.pdf"
Base64.encode64(open(path_to_pdf) { |pdf| pdf.read })
end
end
end
#Elasticsearch log:
[2012-06-29 09:01:15,515][DEBUG][action.bulk ] [Skunge the Laxidazian Troll] [articles][4] failed to execute bulk item (index) index {[articles][article][10], source[{"content":"this title is fluff","created_at":"2012-06-27T22:02:43Z","filename":null,"id":10,"published_on":"2012-06-27","title":"Test title","updated_at":"2012-06-27T22:02:43Z","attachment":null}]}
java.lang.NullPointerException