Как проиндексировать PDF файл в Elasticsearch 5.0.0 с помощью плагина ingest-attachment?

Я новичок в Elasticsearch, и я читаю здесь https://www.elastic.co/guide/en/elasticsearch/plugins/master/mapper-attachments.html, что плагин map-attachments устарел в elasticsearch 5.0.0.

Теперь я попытаюсь проиндексировать pdf файл с новым плагином ingest-attachment и загрузить вложение.

Я пробовал до сих пор

curl -H 'Content-Type: application/pdf' -XPOST localhost:9200/test/1 -d @/cygdrive/c/test/test.pdf

но я получаю следующую ошибку:

{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failed to parse"}],"type":"mapper_parsing_exception","reason":"failed to parse","caused_by":{"type":"not_x_content_exception","reason":"Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes"}},"status":400}

Я бы ожидал, что файл pdf будет проиндексирован и загружен. Что я делаю неправильно?

Я также протестировал Elasticsearch 2.3.3, но плагин-привязки карт недействителен для этой версии, и я не хочу использовать более старую версию Elasticsearch.

Ответ 1

Вам нужно убедиться, что вы создали свой проточный трубопровод:

PUT _ingest/pipeline/attachment
{
  "description" : "Extract attachment information",
  "processors" : [
    {
      "attachment" : {
        "field" : "data",
        "indexed_chars" : -1
      }
    }
  ]
}

Затем вы можете сделать PUT not POST для вашего индекса, используя созданный конвейер.

PUT my_index/my_type/my_id?pipeline=attachment
{
  "data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0="
}

В вашем примере должно быть что-то вроде:

curl -H 'Content-Type: application/pdf' -XPUT localhost:9200/test/1?pipeline=attachment -d @/cygdrive/c/test/test.pdf

Помня, что содержимое PDF должно быть закодировано в base64.

Надеюсь, это поможет вам.

Изменить 1 Пожалуйста, не забудьте прочитать их, это очень помогло мне:

Elastic Ingest

Ingest Plugin

Прохождение презентации

Изменить 2

Кроме того, вы должны установить плагин ingest-attachment.

./bin/elasticsearch-plugin install ingest-attachment

Изменить 3

Прежде чем создавать свой процессор (вложение), создайте свой индекс, сопоставьте поля, которые вы будете использовать, и убедитесь, что у вас есть поле data​​strong > на вашей карте (то же имя "поле" в вашем процессоре вложений), поэтому процесс ingest будет обрабатывать и заполнять поле данных вашим pdf-содержимым.

Я вставил параметр indexed_chars в процессор ingest с -1 значением, поэтому вы можете индексировать большие файлы PDF.

Изменить 4

Отображение должно быть примерно таким:

PUT my_index
{ 
    "mappings" : { 
        "my_type" : { 
            "properties" : { 
                "attachment.data" : { 
                    "type": "text", 
                    "analyzer" : "brazilian" 
                } 
            } 
        } 
    } 
}

В этом случае я использую бразильский фильтр, но вы можете удалить его или использовать самостоятельно.