Adición de documentos directamente a un índice mediante la carga por lotes - Amazon Kendra

Adición de documentos directamente a un índice mediante la carga por lotes

Puede agregar documentos directamente a un índice mediante la API BatchPutDocument. No puede añadir documentos directamente con la consola. Si utiliza la consola, se conecta a un origen de datos para agregar documentos al índice. Los documentos se pueden agregar desde un bucket de S3 o suministrarse como datos binarios. Para obtener una lista de los tipos de documentos compatibles con Amazon Kendra, consulte Tipos de documentos.

La adición de documentos a un índice mediante BatchPutDocument es asincrónica. Después de llamar a la API BatchPutDocument, utilice la API BatchGetDocumentStatus para supervisar el progreso de la indexación de los documentos. Cuando se lama a la API BatchGetDocumentStatus con una lista de identificadores de documento, devuelve el estado del documento. Cuando el estado del documento sea INDEXED o FAILED, se habrá completado el procesamiento del documento. Cuando el estado sea FAILED, la API BatchGetDocumentStatus devolverá el motivo por el que el documento no se haya podido indexar.

Si desea modificar los campos de metadatos o atributos del contenido y el documento durante el proceso de ingesta de documentos, consulte Enriquecimiento de documentos personalizados de Amazon Kendra. Si desea utilizar un origen de datos personalizado, cada documento que envíe mediante la API BatchPutDocument requiere un ID de origen de datos y un ID de ejecución como atributos o campos. Para obtener más información, consulte Atributos obligatorios para orígenes de datos personalizados.

nota

Cada ID de documento debe ser único por índice. No se puede crear un origen de datos para indexar los documentos con sus ID exclusivos y, a continuación, utilizar la API BatchPutDocument para indexar los mismos documentos o viceversa. No se puede crear un origen de datos para indexar los documentos con sus ID exclusivos y, a continuación, utilizar la API BatchPutDocument para indexar los mismos documentos o viceversa. El uso de las API BatchPutDocument y BatchDeleteDocument en combinación con un conector de origen de datos de Amazon Kendra para el mismo conjunto de documentos podría provocar inconsistencias en los datos. En su lugar, recomendamos utilizar el Amazon Kendraconector de origen de datos personalizado.

En los documentos de guía del desarrollador siguientes se muestra cómo añadir documentos directamente a un índice.

Adición de documentos con la API BatchPutDocument

En el siguiente ejemplo se añade un blob de texto a un índice haciendo una llamada a BatchPutDocument. Puede usar la API BatchPutDocument para añadir documentos directamente al índice. Para obtener una lista de los tipos de documentos compatibles con Amazon Kendra, consulte Tipos de documentos.

Para ver un ejemplo de cómo crear un índice con la AWS CLI y los SDK, consulte Crear un índice. Para configurar la CLI y los SDK, consulte Configurar Amazon Kendra.

nota

Los archivos añadidos al índice deben estar en un flujo de bytes codificado en UTF-8.

En los ejemplos siguientes, se añade al índice texto con codificación UTF-8.

CLI

En la AWS Command Line Interface, utilice el siguiente comando. El comando tiene formato para Linux y macOS. Si está usando Windows, reemplace el carácter de continuación de línea de Unix (\) por un signo de intercalación (^).

aws kendra batch-put-document \ --index-id index-id \ --documents '{"Id":"doc-id-1", "Blob":"Amazon.com is an online retailer.", "ContentType":"PLAIN_TEXT", "Title":"Information about Amazon.com"}'
Python
import boto3 kendra = boto3.client("kendra") # Provide the index ID index_id = "index-id" # Provide the title and text title = "Information about Amazon.com" text = "Amazon.com is an online retailer." document = { "Id": "1", "Blob": text, "ContentType": "PLAIN_TEXT", "Title": title } documents = [ document ] result = kendra.batch_put_document( IndexId = index_id, Documents = documents ) print(result)
Java
package com.amazonaws.kendra; import software.amazon.awssdk.core.SdkBytes; import software.amazon.awssdk.services.kendra.KendraClient; import software.amazon.awssdk.services.kendra.model.BatchPutDocumentRequest; import software.amazon.awssdk.services.kendra.model.BatchPutDocumentResponse; import software.amazon.awssdk.services.kendra.model.ContentType; import software.amazon.awssdk.services.kendra.model.Document; public class AddDocumentsViaAPIExample { public static void main(String[] args) { KendraClient kendra = KendraClient.builder().build(); String indexId = "yourIndexId"; Document testDoc = Document .builder() .title("The title of your document") .id("a_doc_id") .blob(SdkBytes.fromUtf8String("your text content")) .contentType(ContentType.PLAIN_TEXT) .build(); BatchPutDocumentRequest batchPutDocumentRequest = BatchPutDocumentRequest .builder() .indexId(indexId) .documents(testDoc) .build(); BatchPutDocumentResponse result = kendra.batchPutDocument(batchPutDocumentRequest); System.out.println(String.format("BatchPutDocument Result: %s", result)); } }

Adición de documentos desde un bucket de S3

Puede agregar documentos directamente al índice desde un bucket de Amazon S3 con la API BatchPutDocument. Puede añadir hasta 10 documentos en la misma llamada. Cuando utilice un bucket de S3, debe proporcionar un rol de IAM con permiso para acceder al bucket que contenga los documentos. Especifique el rol en el parámetro RoleArn.

Utilizar la API BatchPutDocument para añadir documentos desde un bucket de Amazon S3 es una operación puntual. Para mantener un índice sincronizado con el contenido de un bucket, cree un origen de datos de Amazon S3. Para obtener más información, consulte Origen de datos de Amazon S3.

Para ver un ejemplo de cómo crear un índice con la AWS CLI y los SDK, consulte Crear un índice. Para configurar la CLI y los SDK, consulte Configurar Amazon Kendra. Para obtener información sobre la creación de un bucket de S3, consulte la documentación de Amazon Simple Storage Service.

En el siguiente ejemplo, se agregan dos documentos de Microsoft Word al índice mediante la API BatchPutDocument.

Python
import boto3 kendra = boto3.client("kendra") # Provide the index ID index_id = "index-id" # Provide the IAM role ARN required to index documents in an S3 bucket role_arn = "arn:aws:iam::${acccountID}:policy/${roleName}" doc1_s3_file_data = { "Bucket": "bucket-name", "Key": "document1.docx" } doc1_document = { "S3Path": doc1_s3_file_data, "Title": "Document 1 title", "Id": "doc_1" } doc2_s3_file_data = { "Bucket": "bucket-name", "Key": "document2.docx" } doc2_document = { "S3Path": doc2_s3_file_data, "Title": "Document 2 title", "Id": "doc_2" } documents = [ doc1_document, doc2_document ] result = kendra.batch_put_document( Documents = documents, IndexId = index_id, RoleArn = role_arn ) print(result)
Java
package com.amazonaws.kendra; import software.amazon.awssdk.services.kendra.KendraClient; import software.amazon.awssdk.services.kendra.model.BatchPutDocumentRequest; import software.amazon.awssdk.services.kendra.model.BatchPutDocumentResponse; import software.amazon.awssdk.services.kendra.model.Document; import software.amazon.awssdk.services.kendra.model.S3Path; public class AddFilesFromS3Example { public static void main(String[] args) { KendraClient kendra = KendraClient.builder().build(); String indexId = "yourIndexId"; String roleArn = "yourIndexRoleArn"; Document pollyDoc = Document .builder() .s3Path( S3Path.builder() .bucket("amzn-s3-demo-bucket") .key("What is Amazon Polly.docx") .build()) .title("What is Amazon Polly") .id("polly_doc_1") .build(); Document rekognitionDoc = Document .builder() .s3Path( S3Path.builder() .bucket("amzn-s3-demo-bucket") .key("What is Amazon Rekognition.docx") .build()) .title("What is Amazon rekognition") .id("rekognition_doc_1") .build(); BatchPutDocumentRequest batchPutDocumentRequest = BatchPutDocumentRequest .builder() .indexId(indexId) .roleArn(roleArn) .documents(pollyDoc, rekognitionDoc) .build(); BatchPutDocumentResponse result = kendra.batchPutDocument(batchPutDocumentRequest); System.out.println(String.format("BatchPutDocument result: %s", result)); } }