ingest-attachment
Поддерживаемые форматы документов включают PPT, PDF, RTF, ODF и многие другие (см. Поддерживаемые форматы документов Tika).
Входное поле должно быть закодировано в формате base64.
Установка плагина
Установите плагин ingest-attachment
, используя следующую команду:
Опции процессора вложений
Название | Обязательный | Значение по умолчанию | Описание |
---|---|---|---|
field | Да | Имя поля, в котором будет храниться извлеченное содержимое. |
Пример использования плагина ingest-attachment
Следующие шаги покажут вам, как начать работу с плагином ingest-attachment
.
Шаг 1: Создайте индекс для хранения ваших вложений
Следующая команда создает индекс для хранения ваших вложений:
PUT /example-attachment-index
{
"mappings": {
"properties": {}
}
}
Шаг 2: Создайте конвейер
Следующая команда создает конвейер, содержащий процессор вложений:
PUT _ingest/pipeline/attachment
{
"description" : "Извлечение информации о вложениях",
"processors" : [
{
"attachment" : {
"field" : "data"
}
}
]
}
Шаг 3: Сохраните вложение
Преобразуйте вложение в строку base64, чтобы передать его как данные. В этом примере команда base64
преобразует файл lorem.rtf
:
base64 lorem.rtf
В качестве альтернативы вы можете использовать Node.js для чтения файла в формате base64, как показано в следующих командах:
import * as fs from "node:fs/promises";
import path from "node:path";
const filePath = path.join(import.meta.dirname, "lorem.rtf");
const base64File = await fs.readFile(filePath, { encoding: "base64" });
console.log(base64File);
Файл .rtf
содержит следующий текст в формате base64:
Lorem ipsum dolor sit amet: e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0=.
Теперь вы можете сохранить вложение, используя следующую команду:
PUT example-attachment-index/_doc/lorem_rtf?pipeline=attachment
{
"data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0="
}
Результаты запроса
После обработки вложения вы можете выполнять поиск по данным, используя поисковые запросы, как показано в следующем примере:
POST example-attachment-index/_search
{
"query": {
"match": {
"attachment.content": "ipsum"
}
}
}
OpenSearch ответит следующим образом:
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.1724279,
"hits": [
{
"_index": "example-attachment-index",
"_id": "lorem_rtf",
"_score": 1.1724279,
"_source": {
"data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0=",
"attachment": {
"content_type": "application/rtf",
"language": "pt",
"content": "Lorem ipsum dolor sit amet",
"content_length": 28
}
}
}
]
}
}
Извлеченная информация
Следующие поля могут быть извлечены с помощью плагина:
- content
- language
- date
- title
- author
- keywords
- content_type
- content_length
Чтобы извлечь только подмножество этих полей, определите их в свойствах процессора конвейера, как показано в следующем примере:
PUT _ingest/pipeline/attachment
{
"description" : "Извлечение информации о вложениях",
"processors" : [
{
"attachment" : {
"field" : "data",
"properties": ["content", "title", "author"]
}
}
]
}
Ограничение извлекаемого содержимого
Чтобы предотвратить извлечение слишком большого количества символов и перегрузку памяти узла, значение по умолчанию составляет 100_000. Вы можете изменить это значение, используя настройку indexed_chars
. Например, вы можете использовать -1 для неограниченного количества символов, но необходимо убедиться, что у вас достаточно памяти HEAP на узле OpenSearch для извлечения содержимого больших документов.
Вы также можете определить этот лимит для каждого документа, используя поле запроса indexed_chars_field
. Если документ содержит indexed_chars_field
, оно перезапишет настройку indexed_chars
, как показано в следующем примере:
PUT _ingest/pipeline/attachment
{
"description" : "Извлечение информации о вложениях",
"processors" : [
{
"attachment" : {
"field" : "data",
"indexed_chars" : 10,
"indexed_chars_field" : "max_chars"
}
}
]
}
С настроенным конвейером вложений вы можете извлечь 10 символов по умолчанию, не указывая max_chars
в запросе, как показано в следующем примере:
PUT example-attachment-index/_doc/lorem_rtf?pipeline=attachment
{
"data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0="
}
В качестве альтернативы вы можете изменить max_chars
для каждого документа, чтобы извлечь до 15 символов, как показано в следующем примере:
PUT example-attachment-index/_doc/lorem_rtf?pipeline=attachment
{
"data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0=",
"max_chars": 15
}