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

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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 identificador 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 Kendra conector 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.

Añadir documentos con la BatchPutDocument API

En el siguiente ejemplo, se agrega un bloque de texto a un índice mediante una llamada BatchPutDocument. Puedes usar la BatchPutDocument API para añadir documentos directamente a tu índice. Para obtener una lista de los tipos de documentos compatibles, Amazon Kendra consulte Tipos de documentos.

Para ver un ejemplo de cómo crear un índice con los SDK AWS CLI y, consulta 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 AWS Command Line Interface, usa 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

Puedes añadir documentos directamente a tu índice desde un Amazon S3 bucket mediante la BatchPutDocumentAPI. Puede añadir hasta 10 documentos en la misma llamada. Cuando utilizas un bucket de S3, debes proporcionar un IAM rol con permiso para acceder al bucket que contiene tus documentos. Especifique el rol en el parámetro RoleArn.

El uso de la BatchPutDocumentAPI para añadir documentos desde un Amazon S3 depósito es una operación que se realiza una sola vez. Para mantener un índice sincronizado con el contenido de un depósito, cree una fuente de Amazon S3 datos. Para obtener más información, consulte Origen de datos de Amazon S3.

Para ver un ejemplo de cómo crear un índice con los SDK AWS CLI y, 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("an-aws-kendra-test-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("an-aws-kendra-test-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)); } }