Ответ 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 Пожалуйста, не забудьте прочитать их, это очень помогло мне:
Изменить 2
Кроме того, вы должны установить плагин ingest-attachment.
./bin/elasticsearch-plugin install ingest-attachment
Изменить 3
Прежде чем создавать свой процессор (вложение), создайте свой индекс, сопоставьте поля, которые вы будете использовать, и убедитесь, что у вас есть поле datastrong > на вашей карте (то же имя "поле" в вашем процессоре вложений), поэтому процесс ingest будет обрабатывать и заполнять поле данных вашим pdf-содержимым.
Я вставил параметр indexed_chars в процессор ingest с -1 значением, поэтому вы можете индексировать большие файлы PDF.
Изменить 4
Отображение должно быть примерно таким:
PUT my_index
{
"mappings" : {
"my_type" : {
"properties" : {
"attachment.data" : {
"type": "text",
"analyzer" : "brazilian"
}
}
}
}
}
В этом случае я использую бразильский фильтр, но вы можете удалить его или использовать самостоятельно.