私は以前、現在非推奨となっている mapper-attachments プラグインを使用していましたが、これは通常のインデックス作成と一緒に使用するのがかなり簡単でした。ingest-attachment がそれに取って代わり、パイプラインなどが必要になったため、これを適切に使用する方法がわかりにくくなっています。
という名前のモデルがMedia
ありfile
、base64 でエンコードされたファイルを含むフィールドがあるとします。そのファイルには次のマッピングがあります。
mapping '_source' => { :excludes => ['file'] } do
indexes :id, type: :long, index: :not_analyzed
indexes :name, type: :text
indexes :visibility, type: :integer, index: :not_analyzed
indexes :created_at, type: :date, include_in_all: false
indexes :updated_at, type: :date, include_in_all: false
# attachment specific mappings
indexes 'attachment.title', type: :text, store: 'yes'
indexes 'attachment.author', type: :text, store: 'yes'
indexes 'attachment.name', type: :text, store: 'yes'
indexes 'attachment.date', type: :date, store: 'yes'
indexes 'attachment.content_type', type: :text, store: 'yes'
indexes 'attachment.content_length', type: :integer, store: 'yes'
indexes 'attachment.content', term_vector: 'with_positions_offsets', type: :text, store: 'yes'
end
curl を介して添付パイプラインを作成しました。
curl -XPUT 'localhost:9200/_ingest/pipeline/attachment' -d'
{
"description" : "Extract attachment information",
"processors" : [
{
"attachment" : {
"field" : "file"
}
}
]
}'
現在、プラグインを介してMedia.last.__elasticsearch__.index_document
実際のレコードと一緒にレコードをインデックス化するには、以前はシンプルで十分でした。file
mapper-attachments
ingest-attachment
パイプラインとelasticsearch-rails
宝石を使用してこれを行う方法がわかりません。
curl を介して次の PUT を実行できます。
curl -XPUT 'localhost:9200/assets/media/68?pipeline=attachment' -d'
{ "file" : "my_really_long_encoded_file_string" }'
これにより、エンコードされたファイルがインデックス化されますが、明らかに、モデルの残りのデータはインデックス化されません (または、以前にインデックス化されていた場合は完全に上書きされます)。curl コマンドでファイルとともにすべてのモデル属性を含める必要はありません。これを行うためのより良い方法またはより簡単な方法はありますか? パイプラインなしで完全にオフになっていて、取り込みが機能するはずですか?