Как вы используете плагин 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

Это будет правильно индексировать все, и ваш файл будет правильно проанализирован и проиндексирован через конвейер загрузки.