View a markdown version of this page

Solución de problemas de índices vectoriales - Amazon DynamoDB

Solución de problemas de índices vectoriales

En la tabla siguiente, se muestran los problemas más frecuentes que pueden surgir al trabajar con los índices vectoriales y se explica cómo resolverlos.

Síntoma Causa Resolución
ValidationException: SearchConditionExpression must be provided when SearchSchema has a HASH key El índice define una clave de partición de índice vectorial (HASH) en su SearchSchema, pero la búsqueda no proporcionó su valor. Agregue la clave de partición del índice vectorial igual a SearchConditionExpression, por ejemplo Category = :cat, con una entrada ExpressionAttributeValues coincidente.
ValidationException: One element in SearchSchema is not defined in attribute definitions Un atributo SearchSchema (clave de partición de índice vectorial o filtro en línea) no se declara en AttributeDefinitions de la tabla. Agregue cada atributo de SearchSchema a AttributeDefinitions con su tipo, del mismo modo que se declaran los atributos clave para un índice secundario global.
ValidationException: Invalid comparator used in SearchConditionExpression Se utilizó un operador distinto de =. Actualmente, solo se admite el operador de igualdad para los atributos de clave de partición de índice vectorial y filtro en línea. Vuelva a escribir la condición para usar solo =. Los operadores de comparación, rango y pertenencia a conjuntos aún no están disponibles.
ValidationException: Provided TopK value is out of valid range TopK estaba fuera del rango de 1 a 100. Establezca TopK en un valor de 1 a 100, ambos inclusive.
SearchVectors devuelve un error mientras el índice se está rellenando El índice vectorial aún no está listo para la búsqueda. IndexStatus es CREATING o IndexStatus es ACTIVE con Backfilling establecido en true. No puede buscar un índice vectorial hasta que se complete el proceso de relleno. Utilice DescribeTable y espere hasta que Backfilling sea false; a continuación, vuelva a intentar la búsqueda.
Se rechaza la escritura al escribir un elemento con un vector El vector tiene un número de dimensiones incorrecto para el índice. Asegúrese de que la longitud del vector coincide con las Dimensions del índice. Consulte Escritura de elementos con datos vectoriales.
Se rechaza la escritura con “Tipo no válido para parámetro” El atributo vectorial tiene un tipo de datos incorrecto. DynamoDB espera una lista de números de coma flotante de 32 bits. Las causas más comunes incluyen el envío de una cadena (S), un escalar numérico (N), un conjunto de números (NS) o una lista que contenga elementos no numéricos. El mensaje de error indica el índice del elemento infractor cuando un solo miembro tiene el tipo incorrecto. Envíe el atributo vectorial como una lista (L) de números (N). Compruebe que todos los elementos de la lista son números válidos y que la longitud de la lista coincide con las Dimensions del índice.
El elemento ya no lo devuelve SearchVectors después de eliminar u omitir el atributo de clave de partición del índice vectorial Eliminar el atributo de clave de partición de índice vectorial de un elemento (mediante REMOVE en UpdateItem) u omitirlo en un PutItem no produce ningún error. Sin embargo, el elemento se desindexa silenciosamente y ya no aparece en los resultados de búsqueda, aunque el elemento de la tabla base y su incrustación vectorial sigan existiendo. Asegúrese de que cada elemento que desee buscar retenga el atributo de clave de partición del índice vectorial. Si un elemento desaparece inesperadamente de los resultados de búsqueda, compruebe que su atributo de clave de partición sigue presente en el elemento de la tabla base.
Se rechaza la escritura por “no puede contener un valor de cadena vacío” o el tipo de clave de partición del índice vectorial no coincide El atributo de clave de partición del índice vectorial se estableció en una cadena vacía o se escribió con un tipo de datos incorrecto. DynamoDB rechaza estas escrituras porque un atributo de clave de índice no puede estar vacío y debe coincidir con el tipo declarado. Utilice un valor válido y no vacío con el tipo de datos correcto para el atributo de clave de partición del índice vectorial. Compruebe la definición del índice para confirmar el tipo esperado.
Falta un atributo en los resultados de la búsqueda El índice vectorial no proyecta este atributo. Solo puede recuperar los atributos proyectados en el índice. Para obtener atributos adicionales, vuelva a crear el índice con una proyección más amplia o establezca ProjectionType en ALL.

Adición de una clave de partición a un índice vectorial existente

El SearchSchema del índice vectorial se fija en el momento de la creación. No puede agregar, quitar ni cambiar la clave de partición (HASH) después de crear el índice. Tampoco puede cambiar los atributos del filtro en línea. Para cambiar el esquema, cree un índice nuevo y migre a él.

Para agregar una clave de partición o cambiar otros atributos de SearchSchema, realice los siguientes pasos.

  1. Cree un nuevo índice vectorial con la clave de partición que necesite. Use la API de UpdateTable con una acción Create en el parámetro VectorIndexUpdates. Asigne un nombre distinto al nuevo índice. Para obtener instrucciones, consulte Adición de un índice vectorial a una tabla existente.

  2. Espere a que el nuevo índice termine de rellenarse. Llame a DescribeTable y confirme que IndexStatus es ACTIVE y Backfilling es false.

  3. Actualice la aplicación para enviar solicitudes SearchVectors al nuevo índice. Incluya el valor de la clave de partición en SearchConditionExpression. Para obtener más información, consulte Filtro con SearchConditionExpression.

  4. Una vez que confirme los resultados correctos, elimine el índice anterior para dejar de pagar por su almacenamiento. Use la API de UpdateTable con una acción Delete en el parámetro VectorIndexUpdates. Para obtener instrucciones, consulte Eliminación de un índice vectorial.

Las operaciones de indexación no afectan a los datos de la tabla base

La creación o eliminación de un índice vectorial no afecta a la tabla base ni a sus elementos. DynamoDB vuelve a derivar los datos vectoriales de los elementos de la tabla base durante el relleno.