Как вы используете плагин ingest-attachment с эластичными поисковыми рельсами?
Ранее я использовал плагин 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
драгоценный камень.
Я могу сделать следующее PUT через curl:
curl -XPUT 'localhost:9200/assets/media/68?pipeline=attachment' -d'
{ "file" : "my_really_long_encoded_file_string" }'
Это будет индексировать закодированный файл, но, очевидно, он не индексирует остальные данные модели (или полностью перезаписывает их, если они были ранее проиндексированы). Я действительно не хочу включать каждый атрибут модели вместе с файлом в команду curl. Есть ли лучшие или более простые способы сделать это? Неужели я просто полностью отключился от конвейеров, а прием должен работать?
1 ответ
Наконец-то понял это. Мне нужно было обновить самоцветы ES, в частности эластичный поиск-API.
С отображениями и конвейером, как у меня, вы можете легко сделать:
Media.last.__elasticsearch__.index_document pipeline: :attachment
или же
Media.last.__elasticsearch__.update_document pipeline: :attachment
Это будет правильно индексировать все, и ваш файл будет правильно проанализирован и проиндексирован через конвейер загрузки.